UNPKG

rawsql-ts

Version:

High-performance SQL parser and AST analyzer written in TypeScript. Provides fast parsing and advanced transformation capabilities.

78 lines 3.04 kB
import { RawString, TypeValue } from './ValueComponent'; /** * Helper to reformat a SchemaManager registry into the format consumed * by the insert-to-select transformer. */ export function createTableDefinitionRegistryFromSchema(schema) { const registry = {}; for (const table of Object.values(schema)) { registry[table.name] = { name: table.name, columns: Object.entries(table.columns).map(([columnName, column]) => (Object.assign(Object.assign({}, column), { name: columnName }))) }; } return registry; } const NOT_NULL_KINDS = new Set(['not-null', 'primary-key']); const IDENTITY_KINDS = new Set([ 'generated-always-identity', 'generated-by-default-identity' ]); function buildTableName(query) { var _a; const prefixes = (_a = query.namespaces) !== null && _a !== void 0 ? _a : []; if (prefixes.length === 0) { return query.tableName.name; } // Preserve schema qualifiers so INSERT references align with qualified DDL targets. return `${prefixes.join('.')}.${query.tableName.name}`; } function getColumnTypeName(column) { const dataType = column.dataType; if (!dataType) { return undefined; } if (dataType instanceof TypeValue) { return dataType.getTypeName(); } if (dataType instanceof RawString) { return dataType.value; } return undefined; } function adaptColumn(column) { var _a; const defaultConstraint = column.constraints.find((constraint) => constraint.kind === 'default'); const hasDefault = Boolean(defaultConstraint); const hasIdentity = column.constraints.some((constraint) => IDENTITY_KINDS.has(constraint.kind)); const hasNotNull = column.constraints.some((constraint) => NOT_NULL_KINDS.has(constraint.kind)); // Required columns must be NOT NULL/PRIMARY KEY and lack any automatic value coverage. const required = hasNotNull && !hasDefault && !hasIdentity; return { name: column.name.name, typeName: getColumnTypeName(column), required, defaultValue: (_a = defaultConstraint === null || defaultConstraint === void 0 ? void 0 : defaultConstraint.defaultValue) !== null && _a !== void 0 ? _a : null, isNotNull: hasNotNull }; } /** * Convert a parsed CREATE TABLE query into the table definition model used by transformers. */ export function createTableDefinitionFromCreateTableQuery(query) { const qualifiedName = buildTableName(query); const columns = query.columns.map((column) => adaptColumn(column)); return { name: qualifiedName, columns }; } /** * Build a registry of table definitions from a batch of CREATE TABLE AST results. */ export function createTableDefinitionRegistryFromCreateTableQueries(queries) { const registry = {}; for (const query of queries) { const definition = createTableDefinitionFromCreateTableQuery(query); registry[definition.name] = definition; } return registry; } //# sourceMappingURL=TableDefinitionModel.js.map