[upd] sindri

This commit is contained in:
roydfalk 2024-06-03 13:03:39 +02:00
parent fc06d79001
commit 5e91b4565f

View file

@ -5981,6 +5981,167 @@ _sindri.add_output(_sindri.enum_realm.database, "mysql", {
"render": (x) => Promise.resolve(_sindri.outputs.database.mysql.render(x)),
});
var _sindri;
(function (_sindri) {
var outputs;
(function (outputs) {
var database;
(function (database) {
var postgresql;
(function (postgresql) {
/**
*/
function value_encode(value) {
if (value === null) {
return "NULL";
}
else {
switch (typeof (value)) {
case "boolean": {
return (value ? "TRUE" : "FALSE");
break;
}
case "number": {
return value.toString();
break;
}
case "string": {
return ("'" + value + "'");
break;
}
default: {
throw (new Error("unhandled"));
break;
}
}
}
}
/**
*/
function render(input_data) {
return (input_data.domains
.map((domain) => lib_plankton.string.coin("CREATE TABLE\n\t{{name}}(\n{{entries}}\n\t)\n;\n{{comments}}", {
"name": domain.name,
"entries": (([]
// key field
.concat((domain.key_field === null)
? []
: lib_plankton.string.coin("{{name}} {{parameters}}", {
"name": domain.key_field.name,
"parameters": ([
"SERIAL",
]
.join(" ")),
}))
// data fields
.concat(domain.data_fields
.map((data_field) => lib_plankton.string.coin("{{name}} {{parameters}}", {
"name": data_field.name,
"parameters": ((
// type
[
{
"boolean": "BOOLEAN",
"integer": "INTEGER",
"string_short": "VARCHAR(63)",
"string_medium": "VARCHAR(255)",
"string_long": "TEXT",
}[data_field.type],
]
// nullability
.concat(data_field.nullable
? []
: ["NOT NULL"])
// default
.concat((data_field.default === undefined)
? []
: [
lib_plankton.string.coin("DEFAULT {{value}}", {
"value": value_encode(data_field.default),
}),
]))
.join(" "))
})))
// constraints
.concat(domain["constraints"]
.map((constraint) => {
switch (constraint.kind) {
default: {
throw (new Error("unhandled constraint kind: " + constraint.kind));
break;
}
case "foreign_key": {
return lib_plankton.string.coin("FOREIGN KEY ({{fields}}) REFERENCES {{reference_name}}({{reference_fields}})", {
"fields": (constraint.parameters["fields"]
.map(x => ('' + x + ''))
.join(",")),
"reference_name": constraint.parameters["reference"]["name"],
"reference_fields": (constraint.parameters["reference"]["fields"]
.map(x => ('' + x + ''))
.join(",")),
});
break;
}
case "unique": {
return lib_plankton.string.coin("UNIQUE ({{fields}})", {
"fields": (constraint.parameters["fields"]
.map(x => ('' + x + ''))
.join(",")),
});
break;
}
}
})))
.map(x => ("\t\t" + x))
.join(",\n")),
"comments": (([]
.concat((!(domain.description === null))
? [
{
"kind": "TABLE",
"subject": domain.name,
"value": domain.description,
}
]
: [])
.concat(((!(domain.key_field === null))
&&
(!(domain.key_field.description === null)))
? [
{
"kind": "COLUMN",
"subject": (domain.name + "." + domain.key_field.name),
"value": domain.key_field.description,
}
]
: [])
.concat(domain.data_fields
.filter(data_field => (!(data_field.description === null)))
.map(data_field => ({
"kind": "COLUMN",
"subject": (domain.name + "." + data_field.name),
"value": data_field.description,
}))))
.map(entry => lib_plankton.string.coin("COMMENT ON {{kind}} {{subject}} IS '{{value}}';", {
"kind": entry.kind,
"subject": entry.subject,
"value": entry.value,
}))
.join("\n")),
}))
.map(x => (x + "\n"))
.join("\n"));
}
postgresql.render = render;
})(postgresql = database.postgresql || (database.postgresql = {}));
})(database = outputs.database || (outputs.database = {}));
})(outputs = _sindri.outputs || (_sindri.outputs = {}));
})(_sindri || (_sindri = {}));
/**
*/
_sindri.add_output(_sindri.enum_realm.database, "postgresql", {
"render": (x) => Promise.resolve(_sindri.outputs.database.postgresql.render(x)),
});
var _sindri;
(function (_sindri) {
var outputs;
(function (outputs) {