UNPKG

@tanstack/db

Version:

A reactive client store for building super fast apps on sync

58 lines (57 loc) 1.7 kB
import { map } from "@tanstack/db-ivm"; import { compileExpression } from "./evaluators.js"; function processSelectToResults(pipeline, select, _allInputs) { const compiledSelect = []; const spreadAliases = []; for (const [alias, expression] of Object.entries(select)) { if (alias.startsWith(`__SPREAD_SENTINEL__`)) { const tableAlias = alias.replace(`__SPREAD_SENTINEL__`, ``); spreadAliases.push(tableAlias); } else { if (isAggregateExpression(expression)) { compiledSelect.push({ alias, compiledExpression: () => null // Placeholder - will be handled by GROUP BY }); } else { compiledSelect.push({ alias, compiledExpression: compileExpression(expression) }); } } } return pipeline.pipe( map(([key, namespacedRow]) => { const selectResults = {}; for (const tableAlias of spreadAliases) { const tableData = namespacedRow[tableAlias]; if (tableData && typeof tableData === `object`) { for (const [fieldName, fieldValue] of Object.entries(tableData)) { if (!(fieldName in selectResults)) { selectResults[fieldName] = fieldValue; } } } } for (const { alias, compiledExpression } of compiledSelect) { selectResults[alias] = compiledExpression(namespacedRow); } return [ key, { ...namespacedRow, __select_results: selectResults } ]; }) ); } function isAggregateExpression(expr) { return expr.type === `agg`; } export { processSelectToResults }; //# sourceMappingURL=select.js.map