UNPKG

rawsql-ts

Version:

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

86 lines 3.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createTableDefinitionRegistryFromSchema = createTableDefinitionRegistryFromSchema; exports.createTableDefinitionFromCreateTableQuery = createTableDefinitionFromCreateTableQuery; exports.createTableDefinitionRegistryFromCreateTableQueries = createTableDefinitionRegistryFromCreateTableQueries; const ValueComponent_1 = require("./ValueComponent"); /** * Helper to reformat a SchemaManager registry into the format consumed * by the insert-to-select transformer. */ 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]) => ({ ...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 ValueComponent_1.TypeValue) { return dataType.getTypeName(); } if (dataType instanceof ValueComponent_1.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. */ 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. */ function createTableDefinitionRegistryFromCreateTableQueries(queries) { const registry = {}; for (const query of queries) { const definition = createTableDefinitionFromCreateTableQuery(query); registry[definition.name] = definition; } return registry; } //# sourceMappingURL=TableDefinitionModel.js.map