@cocalc/database
Version:
CoCalc: code for working with our PostgreSQL database
50 lines • 1.89 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createTable = exports.primaryKey = exports.primaryKeys = void 0;
const schema_1 = require("@cocalc/util/schema");
const logger_1 = __importDefault(require("@cocalc/backend/logger"));
const util_1 = require("./util");
const pg_type_1 = require("./pg-type");
const indexes_1 = require("./indexes");
const log = (0, logger_1.default)("db:schema:table");
function primaryKeys(table) {
return schema_1.client_db.primary_keys(table);
}
exports.primaryKeys = primaryKeys;
function primaryKey(table) {
const v = primaryKeys(table);
if (v.length != 1) {
throw Error(`compound primary key tables not yet supported - table=${table}`);
}
return v[0];
}
exports.primaryKey = primaryKey;
async function createTable(db, schema) {
log.debug("createTable", schema.name, " creating SQL query");
if (schema.virtual) {
throw Error(`table '${schema.name}' is virtual`);
return;
}
const columns = [];
const primary_keys = primaryKeys(schema);
for (const column in schema.fields) {
const info = schema.fields[column];
let s = `${(0, util_1.quoteField)(column)} ${(0, pg_type_1.pgType)(info)}`;
if (info.unique) {
s += " UNIQUE";
}
if (info.pg_check) {
s += " " + info.pg_check;
}
columns.push(s);
}
const query = `CREATE TABLE ${schema.name} (${columns.join(", ")}, PRIMARY KEY(${primary_keys.join(", ")}))`;
log.debug("createTable", schema.name, " running query...", query);
await db.query(query);
await (0, indexes_1.createIndexes)(db, schema);
}
exports.createTable = createTable;
//# sourceMappingURL=table.js.map