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
JavaScript
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