@sqlrooms/cells 0.29.0-rc.1 → 0.29.0-rc.3
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.
- package/README.md +8 -8
- package/dist/cellsSlice.d.ts.map +1 -1
- package/dist/cellsSlice.js +305 -264
- package/dist/cellsSlice.js.map +1 -1
- package/dist/components/AggregationSelector.d.ts +8 -0
- package/dist/components/AggregationSelector.d.ts.map +1 -0
- package/dist/components/AggregationSelector.js +13 -0
- package/dist/components/AggregationSelector.js.map +1 -0
- package/dist/components/CellSourceSelector.d.ts +12 -0
- package/dist/components/CellSourceSelector.d.ts.map +1 -0
- package/dist/components/CellSourceSelector.js +34 -0
- package/dist/components/CellSourceSelector.js.map +1 -0
- package/dist/components/ChartTypeSelector.d.ts +8 -0
- package/dist/components/ChartTypeSelector.d.ts.map +1 -0
- package/dist/components/ChartTypeSelector.js +13 -0
- package/dist/components/ChartTypeSelector.js.map +1 -0
- package/dist/components/CollapsibleSectionButton.d.ts +10 -0
- package/dist/components/CollapsibleSectionButton.d.ts.map +1 -0
- package/dist/components/CollapsibleSectionButton.js +10 -0
- package/dist/components/CollapsibleSectionButton.js.map +1 -0
- package/dist/components/ColorSelector.d.ts +24 -0
- package/dist/components/ColorSelector.d.ts.map +1 -0
- package/dist/components/ColorSelector.js +17 -0
- package/dist/components/ColorSelector.js.map +1 -0
- package/dist/components/FieldSelector.d.ts +11 -0
- package/dist/components/FieldSelector.d.ts.map +1 -0
- package/dist/components/FieldSelector.js +11 -0
- package/dist/components/FieldSelector.js.map +1 -0
- package/dist/components/FieldTypeIcon.d.ts +8 -0
- package/dist/components/FieldTypeIcon.d.ts.map +1 -0
- package/dist/components/FieldTypeIcon.js +27 -0
- package/dist/components/FieldTypeIcon.js.map +1 -0
- package/dist/components/InputCellContent.d.ts.map +1 -1
- package/dist/components/InputCellContent.js +3 -3
- package/dist/components/InputCellContent.js.map +1 -1
- package/dist/components/SelectionListener.d.ts +15 -0
- package/dist/components/SelectionListener.d.ts.map +1 -0
- package/dist/components/SelectionListener.js +74 -0
- package/dist/components/SelectionListener.js.map +1 -0
- package/dist/components/SqlCellConnectionSelector.d.ts +9 -0
- package/dist/components/SqlCellConnectionSelector.d.ts.map +1 -0
- package/dist/components/SqlCellConnectionSelector.js +21 -0
- package/dist/components/SqlCellConnectionSelector.js.map +1 -0
- package/dist/components/SqlCellContent.d.ts.map +1 -1
- package/dist/components/SqlCellContent.js +31 -156
- package/dist/components/SqlCellContent.js.map +1 -1
- package/dist/components/SqlCellDependentsMenu.d.ts +11 -0
- package/dist/components/SqlCellDependentsMenu.d.ts.map +1 -0
- package/dist/components/SqlCellDependentsMenu.js +62 -0
- package/dist/components/SqlCellDependentsMenu.js.map +1 -0
- package/dist/components/SqlCellEditor.d.ts +14 -0
- package/dist/components/SqlCellEditor.d.ts.map +1 -0
- package/dist/components/SqlCellEditor.js +17 -0
- package/dist/components/SqlCellEditor.js.map +1 -0
- package/dist/components/SqlCellResultNameEditor.d.ts +8 -0
- package/dist/components/SqlCellResultNameEditor.d.ts.map +1 -0
- package/dist/components/SqlCellResultNameEditor.js +38 -0
- package/dist/components/SqlCellResultNameEditor.js.map +1 -0
- package/dist/components/SqlCellResults.d.ts +17 -0
- package/dist/components/SqlCellResults.d.ts.map +1 -0
- package/dist/components/SqlCellResults.js +45 -0
- package/dist/components/SqlCellResults.js.map +1 -0
- package/dist/components/SqlCellRunButton.d.ts +5 -6
- package/dist/components/SqlCellRunButton.d.ts.map +1 -1
- package/dist/components/SqlCellRunButton.js +11 -7
- package/dist/components/SqlCellRunButton.js.map +1 -1
- package/dist/components/SqlQueryPreview.d.ts +9 -0
- package/dist/components/SqlQueryPreview.d.ts.map +1 -0
- package/dist/components/SqlQueryPreview.js +14 -0
- package/dist/components/SqlQueryPreview.js.map +1 -0
- package/dist/components/TextCellContent.d.ts.map +1 -1
- package/dist/components/TextCellContent.js +24 -7
- package/dist/components/TextCellContent.js.map +1 -1
- package/dist/components/VegaCellContent.d.ts +0 -1
- package/dist/components/VegaCellContent.d.ts.map +1 -1
- package/dist/components/VegaCellContent.js +61 -47
- package/dist/components/VegaCellContent.js.map +1 -1
- package/dist/components/VegaCellHeader.d.ts +11 -0
- package/dist/components/VegaCellHeader.d.ts.map +1 -0
- package/dist/components/VegaCellHeader.js +32 -0
- package/dist/components/VegaCellHeader.js.map +1 -0
- package/dist/components/VegaConfigPanel.d.ts +5 -0
- package/dist/components/VegaConfigPanel.d.ts.map +1 -1
- package/dist/components/VegaConfigPanel.js +53 -63
- package/dist/components/VegaConfigPanel.js.map +1 -1
- package/dist/dagUtils.d.ts +10 -9
- package/dist/dagUtils.d.ts.map +1 -1
- package/dist/dagUtils.js +76 -50
- package/dist/dagUtils.js.map +1 -1
- package/dist/defaultCellRegistry.d.ts.map +1 -1
- package/dist/defaultCellRegistry.js +79 -36
- package/dist/defaultCellRegistry.js.map +1 -1
- package/dist/execution.d.ts.map +1 -1
- package/dist/execution.js +24 -17
- package/dist/execution.js.map +1 -1
- package/dist/helpers.d.ts +20 -16
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +79 -44
- package/dist/helpers.js.map +1 -1
- package/dist/hooks/useVegaCellDataSource.d.ts +18 -0
- package/dist/hooks/useVegaCellDataSource.d.ts.map +1 -0
- package/dist/hooks/useVegaCellDataSource.js +40 -0
- package/dist/hooks/useVegaCellDataSource.js.map +1 -0
- package/dist/hooks/useVegaCellQuery.d.ts +16 -0
- package/dist/hooks/useVegaCellQuery.d.ts.map +1 -0
- package/dist/hooks/useVegaCellQuery.js +25 -0
- package/dist/hooks/useVegaCellQuery.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/sqlHelpers.d.ts +8 -8
- package/dist/sqlHelpers.d.ts.map +1 -1
- package/dist/sqlHelpers.js +16 -12
- package/dist/sqlHelpers.js.map +1 -1
- package/dist/types.d.ts +113 -70
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +22 -13
- package/dist/types.js.map +1 -1
- package/dist/useValidateResultName.d.ts +34 -0
- package/dist/useValidateResultName.d.ts.map +1 -0
- package/dist/useValidateResultName.js +111 -0
- package/dist/useValidateResultName.js.map +1 -0
- package/dist/utils.d.ts +10 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +20 -4
- package/dist/utils.js.map +1 -1
- package/dist/vegaSelectionUtils.d.ts +14 -0
- package/dist/vegaSelectionUtils.d.ts.map +1 -0
- package/dist/vegaSelectionUtils.js +97 -0
- package/dist/vegaSelectionUtils.js.map +1 -0
- package/dist/vegaSpecBuilder.d.ts +34 -0
- package/dist/vegaSpecBuilder.d.ts.map +1 -0
- package/dist/vegaSpecBuilder.js +90 -0
- package/dist/vegaSpecBuilder.js.map +1 -0
- package/package.json +12 -13
- package/dist/components/DeleteSheetModal.d.ts +0 -9
- package/dist/components/DeleteSheetModal.d.ts.map +0 -1
- package/dist/components/DeleteSheetModal.js +0 -6
- package/dist/components/DeleteSheetModal.js.map +0 -1
- package/dist/components/SheetsTabBar.d.ts +0 -6
- package/dist/components/SheetsTabBar.d.ts.map +0 -1
- package/dist/components/SheetsTabBar.js +0 -57
- package/dist/components/SheetsTabBar.js.map +0 -1
package/dist/dagUtils.js
CHANGED
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
import { isDefined } from './utils';
|
|
2
|
+
import { normalizeCellDependencies } from './helpers';
|
|
2
3
|
function dedupe(values) {
|
|
3
4
|
return Array.from(new Set(values));
|
|
4
5
|
}
|
|
5
6
|
function getEdgeKind(edge) {
|
|
6
7
|
return edge.kind ?? 'dependency';
|
|
7
8
|
}
|
|
8
|
-
function isGraphCacheComplete(cache,
|
|
9
|
+
function isGraphCacheComplete(cache, artifact) {
|
|
9
10
|
if (!cache)
|
|
10
11
|
return false;
|
|
11
|
-
return
|
|
12
|
+
return artifact.cellIds.every((cellId) => Array.isArray(cache.dependencies[cellId]));
|
|
12
13
|
}
|
|
13
|
-
export function buildGraphCacheFromEdges(
|
|
14
|
+
export function buildGraphCacheFromEdges(artifact) {
|
|
14
15
|
const dependencies = {};
|
|
15
16
|
const dependents = {};
|
|
16
|
-
const localCellIds = new Set(
|
|
17
|
-
for (const cellId of
|
|
17
|
+
const localCellIds = new Set(artifact.cellIds);
|
|
18
|
+
for (const cellId of artifact.cellIds) {
|
|
18
19
|
dependencies[cellId] = [];
|
|
19
20
|
}
|
|
20
|
-
for (const edge of
|
|
21
|
+
for (const edge of artifact.edges) {
|
|
21
22
|
// Cascades only consume dependency edges.
|
|
22
23
|
if (getEdgeKind(edge) !== 'dependency')
|
|
23
24
|
continue;
|
|
@@ -33,16 +34,17 @@ export function buildGraphCacheFromEdges(sheet) {
|
|
|
33
34
|
return {
|
|
34
35
|
dependencies,
|
|
35
36
|
dependents,
|
|
36
|
-
contentHashByCell:
|
|
37
|
+
contentHashByCell: artifact.graphCache?.contentHashByCell || {},
|
|
38
|
+
tableDependencies: artifact.graphCache?.tableDependencies || {},
|
|
37
39
|
};
|
|
38
40
|
}
|
|
39
|
-
export function dependencyEdgesFromGraphCache(
|
|
40
|
-
if (!isGraphCacheComplete(
|
|
41
|
+
export function dependencyEdgesFromGraphCache(artifact) {
|
|
42
|
+
if (!isGraphCacheComplete(artifact.graphCache, artifact))
|
|
41
43
|
return [];
|
|
42
|
-
const cache =
|
|
43
|
-
const localCellIds = new Set(
|
|
44
|
+
const cache = artifact.graphCache;
|
|
45
|
+
const localCellIds = new Set(artifact.cellIds);
|
|
44
46
|
const edges = [];
|
|
45
|
-
for (const target of
|
|
47
|
+
for (const target of artifact.cellIds) {
|
|
46
48
|
const deps = dedupe(cache.dependencies[target] || []);
|
|
47
49
|
for (const source of deps) {
|
|
48
50
|
if (!localCellIds.has(source) || source === target)
|
|
@@ -57,24 +59,26 @@ export function dependencyEdgesFromGraphCache(sheet) {
|
|
|
57
59
|
}
|
|
58
60
|
return edges;
|
|
59
61
|
}
|
|
60
|
-
export function getRenderableDependencyEdges(
|
|
61
|
-
const cacheEdges = dependencyEdgesFromGraphCache(
|
|
62
|
-
if (cacheEdges.length > 0 ||
|
|
62
|
+
export function getRenderableDependencyEdges(artifact) {
|
|
63
|
+
const cacheEdges = dependencyEdgesFromGraphCache(artifact);
|
|
64
|
+
if (cacheEdges.length > 0 ||
|
|
65
|
+
isGraphCacheComplete(artifact.graphCache, artifact)) {
|
|
63
66
|
return cacheEdges;
|
|
64
67
|
}
|
|
65
68
|
// Compatibility fallback while legacy edge persistence still exists.
|
|
66
69
|
// TODO(edge-kinds): merge sheet-local manual edges here once manual editing is enabled.
|
|
67
|
-
return
|
|
70
|
+
return artifact.edges.filter((edge) => getEdgeKind(edge) === 'dependency');
|
|
68
71
|
}
|
|
69
|
-
export function ensureGraphCache(
|
|
70
|
-
if (!
|
|
71
|
-
|
|
72
|
+
export function ensureGraphCache(artifact) {
|
|
73
|
+
if (!artifact.graphCache ||
|
|
74
|
+
!isGraphCacheComplete(artifact.graphCache, artifact)) {
|
|
75
|
+
artifact.graphCache = buildGraphCacheFromEdges(artifact);
|
|
72
76
|
}
|
|
73
|
-
return
|
|
77
|
+
return artifact.graphCache;
|
|
74
78
|
}
|
|
75
|
-
export function replaceCellDependenciesInCache(
|
|
76
|
-
const cache = ensureGraphCache(
|
|
77
|
-
const localCellIds = new Set(
|
|
79
|
+
export function replaceCellDependenciesInCache(artifact, cellId, deps, tableNames) {
|
|
80
|
+
const cache = ensureGraphCache(artifact);
|
|
81
|
+
const localCellIds = new Set(artifact.cellIds);
|
|
78
82
|
const nextDeps = dedupe(deps).filter((depId) => localCellIds.has(depId) && depId !== cellId);
|
|
79
83
|
const previousDeps = cache.dependencies[cellId] || [];
|
|
80
84
|
for (const oldDep of previousDeps) {
|
|
@@ -89,9 +93,13 @@ export function replaceCellDependenciesInCache(sheet, cellId, deps) {
|
|
|
89
93
|
if (!children.includes(cellId))
|
|
90
94
|
children.push(cellId);
|
|
91
95
|
}
|
|
96
|
+
if (tableNames !== undefined) {
|
|
97
|
+
cache.tableDependencies = cache.tableDependencies || {};
|
|
98
|
+
cache.tableDependencies[cellId] = tableNames;
|
|
99
|
+
}
|
|
92
100
|
}
|
|
93
|
-
export function removeCellFromCache(
|
|
94
|
-
const cache = ensureGraphCache(
|
|
101
|
+
export function removeCellFromCache(artifact, cellId) {
|
|
102
|
+
const cache = ensureGraphCache(artifact);
|
|
95
103
|
const previousDeps = cache.dependencies[cellId] || [];
|
|
96
104
|
for (const depId of previousDeps) {
|
|
97
105
|
const children = cache.dependents[depId] || [];
|
|
@@ -107,14 +115,17 @@ export function removeCellFromCache(sheet, cellId) {
|
|
|
107
115
|
if (cache.contentHashByCell) {
|
|
108
116
|
delete cache.contentHashByCell[cellId];
|
|
109
117
|
}
|
|
118
|
+
if (cache.tableDependencies) {
|
|
119
|
+
delete cache.tableDependencies[cellId];
|
|
120
|
+
}
|
|
110
121
|
}
|
|
111
|
-
export function buildDependencyGraph(
|
|
112
|
-
const
|
|
113
|
-
if (!
|
|
122
|
+
export function buildDependencyGraph(artifactId, state) {
|
|
123
|
+
const artifact = state.cells.config.artifacts[artifactId];
|
|
124
|
+
if (!artifact)
|
|
114
125
|
return { dependencies: {}, dependents: {} };
|
|
115
|
-
const cache = isGraphCacheComplete(
|
|
116
|
-
?
|
|
117
|
-
: buildGraphCacheFromEdges(
|
|
126
|
+
const cache = isGraphCacheComplete(artifact.graphCache, artifact)
|
|
127
|
+
? artifact.graphCache
|
|
128
|
+
: buildGraphCacheFromEdges(artifact);
|
|
118
129
|
return {
|
|
119
130
|
dependencies: { ...cache.dependencies },
|
|
120
131
|
dependents: { ...cache.dependents },
|
|
@@ -179,55 +190,70 @@ export function collectReachable(startId, dependents) {
|
|
|
179
190
|
* Async version of dependency graph build that always uses AST-enabled
|
|
180
191
|
* registry dependency derivation.
|
|
181
192
|
*/
|
|
182
|
-
export async function buildDependencyGraphAsync(
|
|
183
|
-
const
|
|
193
|
+
export async function buildDependencyGraphAsync(artifactId, state, sqlSelectToJson) {
|
|
194
|
+
const artifact = state.cells.config.artifacts[artifactId];
|
|
184
195
|
const registry = state.cells.cellRegistry;
|
|
185
|
-
if (!
|
|
196
|
+
if (!artifact) {
|
|
186
197
|
return { dependencies: {}, dependents: {} };
|
|
187
198
|
}
|
|
188
|
-
if (isGraphCacheComplete(
|
|
189
|
-
const cache =
|
|
199
|
+
if (isGraphCacheComplete(artifact.graphCache, artifact)) {
|
|
200
|
+
const cache = artifact.graphCache;
|
|
190
201
|
return {
|
|
191
202
|
dependencies: { ...cache.dependencies },
|
|
192
203
|
dependents: { ...cache.dependents },
|
|
204
|
+
tableDependencies: cache.tableDependencies
|
|
205
|
+
? { ...cache.tableDependencies }
|
|
206
|
+
: undefined,
|
|
193
207
|
};
|
|
194
208
|
}
|
|
195
209
|
const dependencies = {};
|
|
196
210
|
const dependents = {};
|
|
197
|
-
const
|
|
198
|
-
const
|
|
211
|
+
const tableDependencies = {};
|
|
212
|
+
const artifactCellIds = new Set(artifact.cellIds);
|
|
213
|
+
const scopedCells = Object.fromEntries(artifact.cellIds
|
|
199
214
|
.map((id) => state.cells.config.data[id])
|
|
200
215
|
.filter(isDefined)
|
|
201
216
|
.map((cell) => [cell.id, cell]));
|
|
202
|
-
|
|
203
|
-
const cellDeps = await Promise.all(sheet.cellIds.map(async (cellId) => {
|
|
217
|
+
const cellDeps = await Promise.all(artifact.cellIds.map(async (cellId) => {
|
|
204
218
|
const cell = state.cells.config.data[cellId];
|
|
205
219
|
if (!cell)
|
|
206
|
-
return {
|
|
220
|
+
return {
|
|
221
|
+
cellId,
|
|
222
|
+
cellIds: [],
|
|
223
|
+
tableNames: undefined,
|
|
224
|
+
};
|
|
207
225
|
const registryItem = registry[cell.type];
|
|
208
226
|
if (!registryItem)
|
|
209
|
-
return {
|
|
210
|
-
|
|
227
|
+
return {
|
|
228
|
+
cellId,
|
|
229
|
+
cellIds: [],
|
|
230
|
+
tableNames: undefined,
|
|
231
|
+
};
|
|
232
|
+
const raw = await registryItem.findDependencies({
|
|
211
233
|
cell,
|
|
212
234
|
cells: scopedCells,
|
|
213
|
-
|
|
235
|
+
artifactId,
|
|
214
236
|
sqlSelectToJson,
|
|
215
237
|
});
|
|
238
|
+
const normalized = normalizeCellDependencies(raw);
|
|
216
239
|
return {
|
|
217
240
|
cellId,
|
|
218
|
-
|
|
241
|
+
cellIds: Array.from(new Set(normalized.cellIds)).filter((depId) => artifactCellIds.has(depId)),
|
|
242
|
+
tableNames: normalized.tableNames,
|
|
219
243
|
};
|
|
220
244
|
}));
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
for (const dep of deps) {
|
|
245
|
+
for (const { cellId, cellIds, tableNames } of cellDeps) {
|
|
246
|
+
dependencies[cellId] = cellIds;
|
|
247
|
+
for (const dep of cellIds) {
|
|
225
248
|
const list = dependents[dep] || (dependents[dep] = []);
|
|
226
249
|
if (!list.includes(cellId)) {
|
|
227
250
|
list.push(cellId);
|
|
228
251
|
}
|
|
229
252
|
}
|
|
253
|
+
if (tableNames && tableNames.length > 0) {
|
|
254
|
+
tableDependencies[cellId] = tableNames;
|
|
255
|
+
}
|
|
230
256
|
}
|
|
231
|
-
return { dependencies, dependents };
|
|
257
|
+
return { dependencies, dependents, tableDependencies };
|
|
232
258
|
}
|
|
233
259
|
//# sourceMappingURL=dagUtils.js.map
|
package/dist/dagUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dagUtils.js","sourceRoot":"","sources":["../src/dagUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Cell,\n CellsRootState,\n Edge,\n EdgeKind,\n Sheet,\n SheetGraphCache,\n SqlSelectToJsonFn,\n} from './types';\nimport {isDefined} from './utils';\n\nexport type DependencyGraph = {\n dependencies: Record<string, string[]>;\n dependents: Record<string, string[]>;\n};\n\nfunction dedupe(values: string[]): string[] {\n return Array.from(new Set(values));\n}\n\nfunction getEdgeKind(edge: Edge): EdgeKind {\n return edge.kind ?? 'dependency';\n}\n\nfunction isGraphCacheComplete(\n cache: SheetGraphCache | undefined,\n sheet: Sheet,\n): boolean {\n if (!cache) return false;\n return sheet.cellIds.every((cellId) =>\n Array.isArray(cache.dependencies[cellId]),\n );\n}\n\nexport function buildGraphCacheFromEdges(sheet: Sheet): SheetGraphCache {\n const dependencies: Record<string, string[]> = {};\n const dependents: Record<string, string[]> = {};\n const localCellIds = new Set(sheet.cellIds);\n\n for (const cellId of sheet.cellIds) {\n dependencies[cellId] = [];\n }\n\n for (const edge of sheet.edges) {\n // Cascades only consume dependency edges.\n if (getEdgeKind(edge) !== 'dependency') continue;\n if (!localCellIds.has(edge.source) || !localCellIds.has(edge.target))\n continue;\n\n const deps = dependencies[edge.target] || (dependencies[edge.target] = []);\n if (!deps.includes(edge.source)) deps.push(edge.source);\n\n const children = dependents[edge.source] || (dependents[edge.source] = []);\n if (!children.includes(edge.target)) children.push(edge.target);\n }\n\n return {\n dependencies,\n dependents,\n contentHashByCell: sheet.graphCache?.contentHashByCell || {},\n };\n}\n\nexport function dependencyEdgesFromGraphCache(sheet: Sheet): Edge[] {\n if (!isGraphCacheComplete(sheet.graphCache, sheet)) return [];\n\n const cache = sheet.graphCache as SheetGraphCache;\n const localCellIds = new Set(sheet.cellIds);\n const edges: Edge[] = [];\n\n for (const target of sheet.cellIds) {\n const deps = dedupe(cache.dependencies[target] || []);\n for (const source of deps) {\n if (!localCellIds.has(source) || source === target) continue;\n edges.push({\n id: `${source}-${target}`,\n source,\n target,\n kind: 'dependency',\n });\n }\n }\n\n return edges;\n}\n\nexport function getRenderableDependencyEdges(sheet: Sheet): Edge[] {\n const cacheEdges = dependencyEdgesFromGraphCache(sheet);\n if (cacheEdges.length > 0 || isGraphCacheComplete(sheet.graphCache, sheet)) {\n return cacheEdges;\n }\n\n // Compatibility fallback while legacy edge persistence still exists.\n // TODO(edge-kinds): merge sheet-local manual edges here once manual editing is enabled.\n return sheet.edges.filter((edge) => getEdgeKind(edge) === 'dependency');\n}\n\nexport function ensureGraphCache(sheet: Sheet): SheetGraphCache {\n if (!sheet.graphCache || !isGraphCacheComplete(sheet.graphCache, sheet)) {\n sheet.graphCache = buildGraphCacheFromEdges(sheet);\n }\n return sheet.graphCache;\n}\n\nexport function replaceCellDependenciesInCache(\n sheet: Sheet,\n cellId: string,\n deps: string[],\n) {\n const cache = ensureGraphCache(sheet);\n const localCellIds = new Set(sheet.cellIds);\n const nextDeps = dedupe(deps).filter(\n (depId) => localCellIds.has(depId) && depId !== cellId,\n );\n const previousDeps = cache.dependencies[cellId] || [];\n\n for (const oldDep of previousDeps) {\n if (nextDeps.includes(oldDep)) continue;\n const currentDependents = cache.dependents[oldDep] || [];\n cache.dependents[oldDep] = currentDependents.filter((id) => id !== cellId);\n }\n\n cache.dependencies[cellId] = nextDeps;\n\n for (const depId of nextDeps) {\n const children = cache.dependents[depId] || (cache.dependents[depId] = []);\n if (!children.includes(cellId)) children.push(cellId);\n }\n}\n\nexport function removeCellFromCache(sheet: Sheet, cellId: string) {\n const cache = ensureGraphCache(sheet);\n const previousDeps = cache.dependencies[cellId] || [];\n\n for (const depId of previousDeps) {\n const children = cache.dependents[depId] || [];\n cache.dependents[depId] = children.filter((id) => id !== cellId);\n }\n\n const downstream = cache.dependents[cellId] || [];\n for (const dependentId of downstream) {\n const deps = cache.dependencies[dependentId] || [];\n cache.dependencies[dependentId] = deps.filter((id) => id !== cellId);\n }\n\n delete cache.dependencies[cellId];\n delete cache.dependents[cellId];\n if (cache.contentHashByCell) {\n delete cache.contentHashByCell[cellId];\n }\n}\n\nexport function buildDependencyGraph(\n sheetId: string,\n state: CellsRootState,\n): DependencyGraph {\n const sheet = state.cells.config.sheets[sheetId];\n if (!sheet) return {dependencies: {}, dependents: {}};\n\n const cache = isGraphCacheComplete(sheet.graphCache, sheet)\n ? (sheet.graphCache as SheetGraphCache)\n : buildGraphCacheFromEdges(sheet);\n\n return {\n dependencies: {...cache.dependencies},\n dependents: {...cache.dependents},\n };\n}\n\nexport function topologicalOrder(\n roots: string[],\n dependencies: Record<string, string[]>,\n dependents: Record<string, string[]>,\n scope?: Set<string>,\n): string[] {\n const inDegree: Record<string, number> = {};\n const queue: string[] = [];\n\n const addNode = (id: string) => {\n if (scope && !scope.has(id)) return;\n if (!(id in inDegree)) inDegree[id] = 0;\n };\n\n for (const [cellId, deps] of Object.entries(dependencies)) {\n addNode(cellId);\n if (scope && !scope.has(cellId)) continue;\n for (const dep of deps) {\n if (scope && !scope.has(dep)) continue;\n inDegree[cellId] = (inDegree[cellId] ?? 0) + 1;\n addNode(dep);\n }\n }\n\n for (const root of roots) {\n if (scope && !scope.has(root)) continue;\n queue.push(root);\n }\n\n const order: string[] = [];\n while (queue.length) {\n const current = queue.shift() as string;\n if (scope && !scope.has(current)) continue;\n order.push(current);\n for (const child of dependents[current] || []) {\n if (scope && !scope.has(child)) continue;\n inDegree[child] = (inDegree[child] ?? 0) - 1;\n if (inDegree[child] === 0) queue.push(child);\n }\n }\n return order;\n}\n\nexport function collectReachable(\n startId: string,\n dependents: Record<string, string[]>,\n): Set<string> {\n const reachable = new Set<string>();\n const queue = [...(dependents[startId] || [])];\n while (queue.length) {\n const next = queue.shift() as string;\n if (reachable.has(next)) continue;\n reachable.add(next);\n for (const child of dependents[next] || []) {\n queue.push(child);\n }\n }\n return reachable;\n}\n\n/**\n * Async version of dependency graph build that always uses AST-enabled\n * registry dependency derivation.\n */\nexport async function buildDependencyGraphAsync(\n sheetId: string,\n state: CellsRootState,\n sqlSelectToJson: SqlSelectToJsonFn,\n): Promise<DependencyGraph> {\n const sheet = state.cells.config.sheets[sheetId];\n const registry = state.cells.cellRegistry;\n if (!sheet) {\n return {dependencies: {}, dependents: {}};\n }\n\n if (isGraphCacheComplete(sheet.graphCache, sheet)) {\n const cache = sheet.graphCache as SheetGraphCache;\n return {\n dependencies: {...cache.dependencies},\n dependents: {...cache.dependents},\n };\n }\n\n const dependencies: Record<string, string[]> = {};\n const dependents: Record<string, string[]> = {};\n const sheetCellIds = new Set(sheet.cellIds);\n const scopedCells = Object.fromEntries(\n sheet.cellIds\n .map((id) => state.cells.config.data[id])\n .filter(isDefined)\n .map((cell) => [cell.id, cell]),\n ) as Record<string, Cell>;\n\n // Process all cells in parallel\n const cellDeps = await Promise.all(\n sheet.cellIds.map(async (cellId) => {\n const cell = state.cells.config.data[cellId];\n if (!cell) return {cellId, deps: []};\n\n const registryItem = registry[cell.type];\n if (!registryItem) return {cellId, deps: []};\n\n const deps = await registryItem.findDependencies({\n cell,\n cells: scopedCells,\n sheetId,\n sqlSelectToJson,\n });\n\n return {\n cellId,\n deps: Array.from(new Set(deps)).filter((depId) =>\n sheetCellIds.has(depId),\n ),\n };\n }),\n );\n\n // Build the graph from results\n for (const {cellId, deps} of cellDeps) {\n dependencies[cellId] = deps;\n for (const dep of deps) {\n const list = dependents[dep] || (dependents[dep] = []);\n if (!list.includes(cellId)) {\n list.push(cellId);\n }\n }\n }\n\n return {dependencies, dependents};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dagUtils.js","sourceRoot":"","sources":["../src/dagUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Cell,\n CellDependencies,\n CellsRootState,\n CellArtifactRuntime,\n CellArtifactGraphCache,\n Edge,\n EdgeKind,\n SqlSelectToJsonFn,\n} from './types';\nimport {isDefined} from './utils';\nimport {normalizeCellDependencies} from './helpers';\n\nexport type DependencyGraph = {\n dependencies: Record<string, string[]>;\n dependents: Record<string, string[]>;\n tableDependencies?: Record<string, string[]>;\n};\n\nfunction dedupe(values: string[]): string[] {\n return Array.from(new Set(values));\n}\n\nfunction getEdgeKind(edge: Edge): EdgeKind {\n return edge.kind ?? 'dependency';\n}\n\nfunction isGraphCacheComplete(\n cache: CellArtifactGraphCache | undefined,\n artifact: CellArtifactRuntime,\n): boolean {\n if (!cache) return false;\n return artifact.cellIds.every((cellId) =>\n Array.isArray(cache.dependencies[cellId]),\n );\n}\n\nexport function buildGraphCacheFromEdges(\n artifact: CellArtifactRuntime,\n): CellArtifactGraphCache {\n const dependencies: Record<string, string[]> = {};\n const dependents: Record<string, string[]> = {};\n const localCellIds = new Set(artifact.cellIds);\n\n for (const cellId of artifact.cellIds) {\n dependencies[cellId] = [];\n }\n\n for (const edge of artifact.edges) {\n // Cascades only consume dependency edges.\n if (getEdgeKind(edge) !== 'dependency') continue;\n if (!localCellIds.has(edge.source) || !localCellIds.has(edge.target))\n continue;\n\n const deps = dependencies[edge.target] || (dependencies[edge.target] = []);\n if (!deps.includes(edge.source)) deps.push(edge.source);\n\n const children = dependents[edge.source] || (dependents[edge.source] = []);\n if (!children.includes(edge.target)) children.push(edge.target);\n }\n\n return {\n dependencies,\n dependents,\n contentHashByCell: artifact.graphCache?.contentHashByCell || {},\n tableDependencies: artifact.graphCache?.tableDependencies || {},\n };\n}\n\nexport function dependencyEdgesFromGraphCache(\n artifact: CellArtifactRuntime,\n): Edge[] {\n if (!isGraphCacheComplete(artifact.graphCache, artifact)) return [];\n\n const cache = artifact.graphCache as CellArtifactGraphCache;\n const localCellIds = new Set(artifact.cellIds);\n const edges: Edge[] = [];\n\n for (const target of artifact.cellIds) {\n const deps = dedupe(cache.dependencies[target] || []);\n for (const source of deps) {\n if (!localCellIds.has(source) || source === target) continue;\n edges.push({\n id: `${source}-${target}`,\n source,\n target,\n kind: 'dependency',\n });\n }\n }\n\n return edges;\n}\n\nexport function getRenderableDependencyEdges(\n artifact: CellArtifactRuntime,\n): Edge[] {\n const cacheEdges = dependencyEdgesFromGraphCache(artifact);\n if (\n cacheEdges.length > 0 ||\n isGraphCacheComplete(artifact.graphCache, artifact)\n ) {\n return cacheEdges;\n }\n\n // Compatibility fallback while legacy edge persistence still exists.\n // TODO(edge-kinds): merge sheet-local manual edges here once manual editing is enabled.\n return artifact.edges.filter((edge) => getEdgeKind(edge) === 'dependency');\n}\n\nexport function ensureGraphCache(\n artifact: CellArtifactRuntime,\n): CellArtifactGraphCache {\n if (\n !artifact.graphCache ||\n !isGraphCacheComplete(artifact.graphCache, artifact)\n ) {\n artifact.graphCache = buildGraphCacheFromEdges(artifact);\n }\n return artifact.graphCache;\n}\n\nexport function replaceCellDependenciesInCache(\n artifact: CellArtifactRuntime,\n cellId: string,\n deps: string[],\n tableNames?: string[],\n) {\n const cache = ensureGraphCache(artifact);\n const localCellIds = new Set(artifact.cellIds);\n const nextDeps = dedupe(deps).filter(\n (depId) => localCellIds.has(depId) && depId !== cellId,\n );\n const previousDeps = cache.dependencies[cellId] || [];\n\n for (const oldDep of previousDeps) {\n if (nextDeps.includes(oldDep)) continue;\n const currentDependents = cache.dependents[oldDep] || [];\n cache.dependents[oldDep] = currentDependents.filter((id) => id !== cellId);\n }\n\n cache.dependencies[cellId] = nextDeps;\n\n for (const depId of nextDeps) {\n const children = cache.dependents[depId] || (cache.dependents[depId] = []);\n if (!children.includes(cellId)) children.push(cellId);\n }\n\n if (tableNames !== undefined) {\n cache.tableDependencies = cache.tableDependencies || {};\n cache.tableDependencies[cellId] = tableNames;\n }\n}\n\nexport function removeCellFromCache(\n artifact: CellArtifactRuntime,\n cellId: string,\n) {\n const cache = ensureGraphCache(artifact);\n const previousDeps = cache.dependencies[cellId] || [];\n\n for (const depId of previousDeps) {\n const children = cache.dependents[depId] || [];\n cache.dependents[depId] = children.filter((id) => id !== cellId);\n }\n\n const downstream = cache.dependents[cellId] || [];\n for (const dependentId of downstream) {\n const deps = cache.dependencies[dependentId] || [];\n cache.dependencies[dependentId] = deps.filter((id) => id !== cellId);\n }\n\n delete cache.dependencies[cellId];\n delete cache.dependents[cellId];\n if (cache.contentHashByCell) {\n delete cache.contentHashByCell[cellId];\n }\n if (cache.tableDependencies) {\n delete cache.tableDependencies[cellId];\n }\n}\n\nexport function buildDependencyGraph(\n artifactId: string,\n state: CellsRootState,\n): DependencyGraph {\n const artifact = state.cells.config.artifacts[artifactId];\n if (!artifact) return {dependencies: {}, dependents: {}};\n\n const cache = isGraphCacheComplete(artifact.graphCache, artifact)\n ? (artifact.graphCache as CellArtifactGraphCache)\n : buildGraphCacheFromEdges(artifact);\n\n return {\n dependencies: {...cache.dependencies},\n dependents: {...cache.dependents},\n };\n}\n\nexport function topologicalOrder(\n roots: string[],\n dependencies: Record<string, string[]>,\n dependents: Record<string, string[]>,\n scope?: Set<string>,\n): string[] {\n const inDegree: Record<string, number> = {};\n const queue: string[] = [];\n\n const addNode = (id: string) => {\n if (scope && !scope.has(id)) return;\n if (!(id in inDegree)) inDegree[id] = 0;\n };\n\n for (const [cellId, deps] of Object.entries(dependencies)) {\n addNode(cellId);\n if (scope && !scope.has(cellId)) continue;\n for (const dep of deps) {\n if (scope && !scope.has(dep)) continue;\n inDegree[cellId] = (inDegree[cellId] ?? 0) + 1;\n addNode(dep);\n }\n }\n\n for (const root of roots) {\n if (scope && !scope.has(root)) continue;\n queue.push(root);\n }\n\n const order: string[] = [];\n while (queue.length) {\n const current = queue.shift() as string;\n if (scope && !scope.has(current)) continue;\n order.push(current);\n for (const child of dependents[current] || []) {\n if (scope && !scope.has(child)) continue;\n inDegree[child] = (inDegree[child] ?? 0) - 1;\n if (inDegree[child] === 0) queue.push(child);\n }\n }\n return order;\n}\n\nexport function collectReachable(\n startId: string,\n dependents: Record<string, string[]>,\n): Set<string> {\n const reachable = new Set<string>();\n const queue = [...(dependents[startId] || [])];\n while (queue.length) {\n const next = queue.shift() as string;\n if (reachable.has(next)) continue;\n reachable.add(next);\n for (const child of dependents[next] || []) {\n queue.push(child);\n }\n }\n return reachable;\n}\n\n/**\n * Async version of dependency graph build that always uses AST-enabled\n * registry dependency derivation.\n */\nexport async function buildDependencyGraphAsync(\n artifactId: string,\n state: CellsRootState,\n sqlSelectToJson: SqlSelectToJsonFn,\n): Promise<DependencyGraph> {\n const artifact = state.cells.config.artifacts[artifactId];\n const registry = state.cells.cellRegistry;\n if (!artifact) {\n return {dependencies: {}, dependents: {}};\n }\n\n if (isGraphCacheComplete(artifact.graphCache, artifact)) {\n const cache = artifact.graphCache as CellArtifactGraphCache;\n return {\n dependencies: {...cache.dependencies},\n dependents: {...cache.dependents},\n tableDependencies: cache.tableDependencies\n ? {...cache.tableDependencies}\n : undefined,\n };\n }\n\n const dependencies: Record<string, string[]> = {};\n const dependents: Record<string, string[]> = {};\n const tableDependencies: Record<string, string[]> = {};\n const artifactCellIds = new Set(artifact.cellIds);\n const scopedCells = Object.fromEntries(\n artifact.cellIds\n .map((id) => state.cells.config.data[id])\n .filter(isDefined)\n .map((cell) => [cell.id, cell]),\n ) as Record<string, Cell>;\n\n const cellDeps = await Promise.all(\n artifact.cellIds.map(async (cellId) => {\n const cell = state.cells.config.data[cellId];\n if (!cell)\n return {\n cellId,\n cellIds: [] as string[],\n tableNames: undefined as string[] | undefined,\n };\n\n const registryItem = registry[cell.type];\n if (!registryItem)\n return {\n cellId,\n cellIds: [] as string[],\n tableNames: undefined as string[] | undefined,\n };\n\n const raw = await registryItem.findDependencies({\n cell,\n cells: scopedCells,\n artifactId,\n sqlSelectToJson,\n });\n const normalized = normalizeCellDependencies(raw);\n\n return {\n cellId,\n cellIds: Array.from(new Set(normalized.cellIds)).filter((depId) =>\n artifactCellIds.has(depId),\n ),\n tableNames: normalized.tableNames,\n };\n }),\n );\n\n for (const {cellId, cellIds, tableNames} of cellDeps) {\n dependencies[cellId] = cellIds;\n for (const dep of cellIds) {\n const list = dependents[dep] || (dependents[dep] = []);\n if (!list.includes(cellId)) {\n list.push(cellId);\n }\n }\n if (tableNames && tableNames.length > 0) {\n tableDependencies[cellId] = tableNames;\n }\n }\n\n return {dependencies, dependents, tableDependencies};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultCellRegistry.d.ts","sourceRoot":"","sources":["../src/defaultCellRegistry.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAEV,YAAY,
|
|
1
|
+
{"version":3,"file":"defaultCellRegistry.d.ts","sourceRoot":"","sources":["../src/defaultCellRegistry.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAEV,YAAY,EAQb,MAAM,SAAS,CAAC;AAIjB,wBAAgB,yBAAyB,IAAI,YAAY,CA4PxD"}
|
|
@@ -7,17 +7,17 @@ import { SqlCellContent } from './components/SqlCellContent';
|
|
|
7
7
|
import { TextCellContent } from './components/TextCellContent';
|
|
8
8
|
import { VegaCellContent } from './components/VegaCellContent';
|
|
9
9
|
import { executeSqlCell } from './execution';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import { isInputCell } from './types';
|
|
10
|
+
import { findArtifactIdForCell, resolveArtifactSchemaName } from './helpers';
|
|
11
|
+
import { dropResultRelation, renameResultRelation } from './resultRelationPolicy';
|
|
12
|
+
import { findSqlDependenciesFromAst, qualifyArtifactLocalResultNames, renderSqlWithInputs, } from './sqlHelpers';
|
|
13
|
+
import { isInputCell, isSqlCell } from './types';
|
|
14
14
|
import { getEffectiveResultName, isDefined } from './utils';
|
|
15
15
|
export function createDefaultCellRegistry() {
|
|
16
16
|
return {
|
|
17
17
|
sql: {
|
|
18
18
|
type: 'sql',
|
|
19
19
|
title: 'SQL Query',
|
|
20
|
-
createCell: (id) => ({
|
|
20
|
+
createCell: ({ id }) => ({
|
|
21
21
|
id,
|
|
22
22
|
type: 'sql',
|
|
23
23
|
data: { title: 'Untitled Query', sql: '' },
|
|
@@ -30,12 +30,52 @@ export function createDefaultCellRegistry() {
|
|
|
30
30
|
sqlSelectToJson,
|
|
31
31
|
});
|
|
32
32
|
},
|
|
33
|
+
createStatus: () => ({
|
|
34
|
+
type: 'sql',
|
|
35
|
+
status: 'idle',
|
|
36
|
+
referencedTables: [],
|
|
37
|
+
}),
|
|
38
|
+
onRemove: async ({ status, get }) => {
|
|
39
|
+
if (status?.type === 'sql' && status.resultView) {
|
|
40
|
+
try {
|
|
41
|
+
const connector = await get().db.getConnector();
|
|
42
|
+
await dropResultRelation({
|
|
43
|
+
connector,
|
|
44
|
+
relationName: status.resultView,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// best-effort
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
hasSemanticChange: (oldCell, newCell) => {
|
|
53
|
+
const oldSql = isSqlCell(oldCell) ? oldCell.data.sql : undefined;
|
|
54
|
+
const newSql = isSqlCell(newCell) ? newCell.data.sql : undefined;
|
|
55
|
+
return oldSql !== newSql;
|
|
56
|
+
},
|
|
57
|
+
invalidateStatus: (currentStatus) => ({
|
|
58
|
+
type: 'sql',
|
|
59
|
+
status: 'idle',
|
|
60
|
+
referencedTables: currentStatus.referencedTables || [],
|
|
61
|
+
}),
|
|
62
|
+
getRelationsToDrop: (status) => {
|
|
63
|
+
const sqlStatus = status;
|
|
64
|
+
return sqlStatus.resultView ? [sqlStatus.resultView] : [];
|
|
65
|
+
},
|
|
66
|
+
recordError: (currentStatus, message) => ({
|
|
67
|
+
...currentStatus,
|
|
68
|
+
status: 'error',
|
|
69
|
+
lastError: message,
|
|
70
|
+
}),
|
|
71
|
+
getResultRelation: (status) => {
|
|
72
|
+
const sqlStatus = status;
|
|
73
|
+
return sqlStatus.resultView;
|
|
74
|
+
},
|
|
33
75
|
runCell: async ({ id, opts, get, set }) => {
|
|
34
|
-
const
|
|
35
|
-
if (
|
|
36
|
-
|
|
37
|
-
// stays current without paying the cost on every keystroke.
|
|
38
|
-
await get().cells.updateEdgesFromSql(ownerSheetId, id);
|
|
76
|
+
const ownerArtifactId = findArtifactIdForCell(get(), id);
|
|
77
|
+
if (ownerArtifactId) {
|
|
78
|
+
await get().cells.updateEdgesFromSql(ownerArtifactId, id);
|
|
39
79
|
}
|
|
40
80
|
const controller = new AbortController();
|
|
41
81
|
set((s) => produce(s, (draft) => {
|
|
@@ -47,7 +87,6 @@ export function createDefaultCellRegistry() {
|
|
|
47
87
|
signal: controller.signal,
|
|
48
88
|
setCellResult: get().cells.setCellResult,
|
|
49
89
|
});
|
|
50
|
-
// Refresh table schemas after execution (fire and forget)
|
|
51
90
|
void get().db.refreshTableSchemas();
|
|
52
91
|
},
|
|
53
92
|
renameResult: async ({ id, oldResultView, get, set }) => {
|
|
@@ -56,11 +95,16 @@ export function createDefaultCellRegistry() {
|
|
|
56
95
|
if (!cell || cell.type !== 'sql')
|
|
57
96
|
return;
|
|
58
97
|
const status = state.cells.status[id];
|
|
59
|
-
const previousRelationType = (status?.type === 'sql'
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const
|
|
63
|
-
const
|
|
98
|
+
const previousRelationType = (status?.type === 'sql'
|
|
99
|
+
? status.resultRelationType
|
|
100
|
+
: undefined) ?? 'view';
|
|
101
|
+
const artifactId = findArtifactIdForCell(state, id);
|
|
102
|
+
const artifact = artifactId
|
|
103
|
+
? state.cells.config.artifacts[artifactId]
|
|
104
|
+
: undefined;
|
|
105
|
+
const schemaName = artifact
|
|
106
|
+
? resolveArtifactSchemaName(artifact)
|
|
107
|
+
: 'main';
|
|
64
108
|
const effectiveResultName = getEffectiveResultName(cell.data, convertToValidColumnOrTableName);
|
|
65
109
|
const newTableName = makeQualifiedTableName({
|
|
66
110
|
table: effectiveResultName,
|
|
@@ -70,16 +114,13 @@ export function createDefaultCellRegistry() {
|
|
|
70
114
|
if (newTableName === oldResultView) {
|
|
71
115
|
return;
|
|
72
116
|
}
|
|
73
|
-
// Re-create the relation under the new name. For materialized results
|
|
74
|
-
// keep table semantics, otherwise keep view semantics.
|
|
75
117
|
const connector = await state.db.getConnector();
|
|
76
118
|
const sql = cell.data.sql;
|
|
77
|
-
const scopedCellIds =
|
|
119
|
+
const scopedCellIds = artifact?.cellIds ?? Object.keys(state.cells.config.data);
|
|
78
120
|
const scopedCells = Object.fromEntries(scopedCellIds
|
|
79
121
|
.map((cellId) => state.cells.config.data[cellId])
|
|
80
122
|
.filter(isDefined)
|
|
81
123
|
.map((candidate) => [candidate.id, candidate]));
|
|
82
|
-
// Gather inputs for SQL rendering
|
|
83
124
|
const inputs = Object.values(scopedCells)
|
|
84
125
|
.filter((c) => isInputCell(c))
|
|
85
126
|
.map((c) => ({
|
|
@@ -87,10 +128,10 @@ export function createDefaultCellRegistry() {
|
|
|
87
128
|
value: c.data.input.value,
|
|
88
129
|
}));
|
|
89
130
|
const renderedSql = renderSqlWithInputs(sql, inputs);
|
|
90
|
-
const rewrittenSql =
|
|
131
|
+
const rewrittenSql = qualifyArtifactLocalResultNames({
|
|
91
132
|
sql: renderedSql,
|
|
92
|
-
|
|
93
|
-
|
|
133
|
+
artifactSchema: schemaName,
|
|
134
|
+
artifactCellIds: scopedCellIds,
|
|
94
135
|
cells: state.cells.config.data,
|
|
95
136
|
getSqlResultName: (cellId) => {
|
|
96
137
|
const c = state.cells.config.data[cellId];
|
|
@@ -100,8 +141,6 @@ export function createDefaultCellRegistry() {
|
|
|
100
141
|
return undefined;
|
|
101
142
|
},
|
|
102
143
|
});
|
|
103
|
-
// Rename must preserve whichever mode execution selected (view/table).
|
|
104
|
-
// We clear any stale object at the destination name first.
|
|
105
144
|
await renameResultRelation({
|
|
106
145
|
connector,
|
|
107
146
|
oldRelationName: oldResultView,
|
|
@@ -109,23 +148,22 @@ export function createDefaultCellRegistry() {
|
|
|
109
148
|
relationType: previousRelationType,
|
|
110
149
|
viewSql: rewrittenSql,
|
|
111
150
|
});
|
|
112
|
-
// Update status with new view name
|
|
113
151
|
set((s) => produce(s, (draft) => {
|
|
114
|
-
const
|
|
115
|
-
if (
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
152
|
+
const draftStatus = draft.cells.status[id];
|
|
153
|
+
if (draftStatus?.type === 'sql') {
|
|
154
|
+
draftStatus.resultName = newTableName;
|
|
155
|
+
draftStatus.resultView = newTableName;
|
|
156
|
+
draftStatus.resultRelationType =
|
|
157
|
+
previousRelationType;
|
|
119
158
|
}
|
|
120
159
|
}));
|
|
121
|
-
// Refresh schema tree
|
|
122
160
|
void get().db.refreshTableSchemas();
|
|
123
161
|
},
|
|
124
162
|
},
|
|
125
163
|
text: {
|
|
126
164
|
type: 'text',
|
|
127
165
|
title: 'Text / Markdown',
|
|
128
|
-
createCell: (id) => ({
|
|
166
|
+
createCell: ({ id }) => ({
|
|
129
167
|
id,
|
|
130
168
|
type: 'text',
|
|
131
169
|
data: { title: 'Text', text: '' },
|
|
@@ -136,11 +174,12 @@ export function createDefaultCellRegistry() {
|
|
|
136
174
|
vega: {
|
|
137
175
|
type: 'vega',
|
|
138
176
|
title: 'Visualization',
|
|
139
|
-
createCell: (id) => ({
|
|
177
|
+
createCell: ({ id }) => ({
|
|
140
178
|
id,
|
|
141
179
|
type: 'vega',
|
|
142
180
|
data: {
|
|
143
181
|
title: 'Chart',
|
|
182
|
+
crossFilter: { enabled: true },
|
|
144
183
|
vegaSpec: {
|
|
145
184
|
data: { name: 'queryResult' },
|
|
146
185
|
mark: 'bar',
|
|
@@ -151,13 +190,17 @@ export function createDefaultCellRegistry() {
|
|
|
151
190
|
renderCell: ({ id, cell, renderContainer }) => (_jsx(VegaCellContent, { id: id, cell: cell, renderContainer: renderContainer })),
|
|
152
191
|
findDependencies: async ({ cell }) => {
|
|
153
192
|
const sqlId = cell.data.sqlId;
|
|
154
|
-
|
|
193
|
+
const tableRef = cell.data.tableRef;
|
|
194
|
+
return {
|
|
195
|
+
cellIds: sqlId ? [sqlId] : [],
|
|
196
|
+
tableNames: tableRef ? [tableRef] : [],
|
|
197
|
+
};
|
|
155
198
|
},
|
|
156
199
|
},
|
|
157
200
|
input: {
|
|
158
201
|
type: 'input',
|
|
159
202
|
title: 'Input / Parameter',
|
|
160
|
-
createCell: (id) => ({
|
|
203
|
+
createCell: ({ id }) => ({
|
|
161
204
|
id,
|
|
162
205
|
type: 'input',
|
|
163
206
|
data: {
|
|
@@ -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 {findSheetIdForCell, resolveSheetSchemaName} from './helpers';\nimport {\n findSqlDependenciesFromAst,\n qualifySheetLocalResultNames,\n renderSqlWithInputs,\n} from './sqlHelpers';\nimport {renameResultRelation} from './resultRelationPolicy';\nimport type {\n Cell,\n CellRegistry,\n InputCell,\n SqlCell,\n SqlCellData,\n TextCell,\n VegaCell,\n} from './types';\nimport {isInputCell} 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: string): 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 runCell: async ({id, opts, get, set}) => {\n const ownerSheetId = findSheetIdForCell(get(), id);\n if (ownerSheetId) {\n // Recompute this SQL cell's dependencies on explicit run so graph state\n // stays current without paying the cost on every keystroke.\n await get().cells.updateEdgesFromSql(ownerSheetId, 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 // Refresh table schemas after execution (fire and forget)\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' ? status.resultRelationType : undefined) ??\n 'view';\n\n const sheetId = findSheetIdForCell(state, id);\n const sheet = sheetId ? state.cells.config.sheets[sheetId] : undefined;\n const schemaName = sheet ? resolveSheetSchemaName(sheet) : '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 // Re-create the relation under the new name. For materialized results\n // keep table semantics, otherwise keep view semantics.\n const connector = await state.db.getConnector();\n const sql = (cell.data as SqlCellData).sql;\n const scopedCellIds =\n sheet?.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 // Gather inputs for SQL rendering\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 = qualifySheetLocalResultNames({\n sql: renderedSql,\n sheetSchema: schemaName,\n sheetCellIds: 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 // Rename must preserve whichever mode execution selected (view/table).\n // We clear any stale object at the destination name first.\n await renameResultRelation({\n connector,\n oldRelationName: oldResultView,\n newRelationName: newTableName,\n relationType: previousRelationType,\n viewSql: rewrittenSql,\n });\n\n // Update status with new view name\n set((s) =>\n produce(s, (draft) => {\n const status = draft.cells.status[id];\n if (status?.type === 'sql') {\n status.resultName = newTableName;\n status.resultView = newTableName;\n status.resultRelationType = previousRelationType;\n }\n }),\n );\n\n // Refresh schema tree\n void get().db.refreshTableSchemas();\n },\n },\n text: {\n type: 'text',\n title: 'Text / Markdown',\n createCell: (id: string): 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: string): VegaCell => ({\n id,\n type: 'vega',\n data: {\n title: 'Chart',\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 return sqlId ? [sqlId] : [];\n },\n },\n input: {\n type: 'input',\n title: 'Input / Parameter',\n createCell: (id: string): 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 {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"]}
|
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,iBA0O/B"}
|