ddl-manager
Version:
store postgres procedures and triggers in files
111 lines • 3.67 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CaseWhen = void 0;
const AbstractExpressionElement_1 = require("./AbstractExpressionElement");
const lodash_1 = require("lodash");
class CaseWhen extends AbstractExpressionElement_1.AbstractExpressionElement {
constructor(params) {
super();
this.cases = params.cases;
this.else = params.else;
}
children() {
const children = [];
for (const caseElem of this.cases) {
children.push(...caseElem.when.children());
children.push(...caseElem.then.children());
}
if (this.else) {
children.push(...this.else.children());
}
return children;
}
clone(changes = {}) {
return new CaseWhen({
cases: changes.cases || this.cloneCases(),
else: ("else" in changes ?
changes.else :
this.cloneElse())
});
}
replaceTable(replaceTable, toTable) {
const changes = {};
changes.cases = this.cases.map(caseElem => {
const newWhen = caseElem.when.replaceTable(replaceTable, toTable);
const newThen = caseElem.then.replaceTable(replaceTable, toTable);
return { when: newWhen, then: newThen };
});
if (this.else) {
changes.else = this.else.replaceTable(replaceTable, toTable);
}
return this.clone(changes);
}
replaceColumn(replaceColumn, toSql) {
const changes = {};
changes.cases = this.cases.map(caseElem => {
const newWhen = caseElem.when.replaceColumn(replaceColumn, toSql);
const newThen = caseElem.then.replaceColumn(replaceColumn, toSql);
return { when: newWhen, then: newThen };
});
if (this.else) {
changes.else = this.else.replaceColumn(replaceColumn, toSql);
}
return this.clone(changes);
}
replaceFuncCall(replaceFunc, toSql) {
const changes = {};
changes.cases = this.cases.map(caseElem => {
const newWhen = caseElem.when.replaceFuncCall(replaceFunc, toSql);
const newThen = caseElem.then.replaceFuncCall(replaceFunc, toSql);
return { when: newWhen, then: newThen };
});
if (this.else) {
changes.else = this.else.replaceFuncCall(replaceFunc, toSql);
}
return this.clone(changes);
}
cloneElse() {
if (this.else) {
return this.else.clone();
}
}
cloneCases() {
return this.cases.map(someCase => ({
when: someCase.when.clone(),
then: someCase.then.clone()
}));
}
template(spaces) {
return [
spaces + "case",
...lodash_1.flatMap(this.cases, someCase => this.printCase(someCase, spaces)),
...this.printElse(spaces),
spaces + "end"
];
}
printCase(someCase, spaces) {
return [
spaces.plusOneLevel() + "when",
someCase.when.toSQL(spaces
.plusOneLevel()
.plusOneLevel()),
spaces.plusOneLevel() + "then",
someCase.then.toSQL(spaces
.plusOneLevel()
.plusOneLevel())
];
}
printElse(spaces) {
if (!this.else) {
return [];
}
return [
spaces.plusOneLevel() + "else",
...this.else.template(spaces
.plusOneLevel()
.plusOneLevel())
];
}
}
exports.CaseWhen = CaseWhen;
//# sourceMappingURL=CaseWhen.js.map