@fewer/adapter-postgres
Version:
A Fewer database adapter to connect to Postgres
64 lines • 2.08 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const squel_1 = __importDefault(require("./squel"));
function getTypeName(type) {
// If there is no config, then we only have the name:
if (!type.config)
return type.name;
switch (type.name) {
case 'char':
case 'varchar': {
const config = type.config;
if (config.length) {
return `${type.name}(${config.length})`;
}
return type.name;
}
case 'numeric':
case 'decimal': {
const config = type.config;
if (config.scale) {
return `${type.name}(${config.precision}, ${config.scale})`;
}
if (config.precision) {
return `${type.name}(${config.precision})`;
}
return type.name;
}
case 'array': {
return `${getTypeName(type.config.subtype)}[]`;
}
default:
return type.name;
}
}
function createTable(operation) {
const create = squel_1.default.create(operation.options);
create.table(operation.name);
for (const [columnName, columnType] of Object.entries(operation.columns)) {
const typeName = getTypeName(columnType);
create.field(columnName, typeName, columnType.config);
}
return create.toString();
}
function dropTable(operation) {
return squel_1.default.dropTable(operation.name).toString();
}
function migrate(migration) {
const sqls = migration.operations.map(operation => {
switch (operation.type) {
case 'createTable':
return createTable(operation);
case 'dropTable':
return dropTable(operation);
default:
return null;
}
});
return sqls.filter(Boolean).join('; ');
}
exports.default = migrate;
//# sourceMappingURL=migrate.js.map