UNPKG

mdb-reader

Version:

JavaScript library to read data from Access databases

44 lines (43 loc) 2.07 kB
import { Database } from "../../Database.js"; import { getComplexColumnsData } from "./complexColumnsData.js"; import { getMSysObjectsTable } from "../../systemTables.js"; import { maskTableId } from "../../util.js"; /** * Resolves (complexTypeId, tableDefinitionPage) to the flat table that stores * attachment rows for that complex column. * Throws if the system table is missing or no matching row is found. */ export function resolveFlatTableForComplexColumn(database, column) { const msysObjectsData = getMSysObjectsTable(database).getData({ columns: ["Id", "Name"], }); const complexColsData = getComplexColumnsData(database); const tableDefPageMasked = maskTableId(column.complex.tableDefinitionPage); for (const row of complexColsData) { const rowFlatTableId = row.FlatTableID; if (!rowFlatTableId) { continue; } const rowConceptualTableId = row.ConceptualTableID; const tableMatch = typeof rowConceptualTableId === "number" && rowConceptualTableId === tableDefPageMasked; if (!tableMatch) { continue; } const complexTypeIdMatch = typeof row.ComplexTypeObjectID === "number" && row.ComplexTypeObjectID === column.complex.typeId; const complexIdMatch = typeof row.ComplexID === "number" && row.ComplexID === column.complex.typeId; const columnNameMatch = typeof row.ColumnName === "string" && row.ColumnName.toLowerCase() === column.name.toLowerCase(); if (!complexTypeIdMatch && !complexIdMatch && !columnNameMatch) { continue; } const flatTableId = maskTableId(rowFlatTableId); const flatTableRow = msysObjectsData.find((r) => maskTableId(r.Id) === flatTableId); if (!flatTableRow) { throw new Error(`Flat table not found for complex column ${column.name}`); } return { tableName: flatTableRow.Name, firstPage: flatTableId, }; } throw new Error(`Flat table not found for complex column ${column.name}`); }