kysely
Version:
Type safe SQL query builder
35 lines (34 loc) • 1.81 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseCommonTableExpression = void 0;
const common_table_expression_name_node_js_1 = require("../operation-node/common-table-expression-name-node.js");
const parse_utils_js_1 = require("./parse-utils.js");
const object_utils_js_1 = require("../util/object-utils.js");
const cte_builder_js_1 = require("../query-builder/cte-builder.js");
const common_table_expression_node_js_1 = require("../operation-node/common-table-expression-node.js");
function parseCommonTableExpression(nameOrBuilderCallback, expression) {
const expressionNode = expression((0, parse_utils_js_1.createQueryCreator)()).toOperationNode();
if ((0, object_utils_js_1.isFunction)(nameOrBuilderCallback)) {
return nameOrBuilderCallback(cteBuilderFactory(expressionNode)).toOperationNode();
}
return common_table_expression_node_js_1.CommonTableExpressionNode.create(parseCommonTableExpressionName(nameOrBuilderCallback), expressionNode);
}
exports.parseCommonTableExpression = parseCommonTableExpression;
function cteBuilderFactory(expressionNode) {
return (name) => {
return new cte_builder_js_1.CTEBuilder({
node: common_table_expression_node_js_1.CommonTableExpressionNode.create(parseCommonTableExpressionName(name), expressionNode),
});
};
}
function parseCommonTableExpressionName(name) {
if (name.includes('(')) {
const parts = name.split(/[\(\)]/);
const table = parts[0];
const columns = parts[1].split(',').map((it) => it.trim());
return common_table_expression_name_node_js_1.CommonTableExpressionNameNode.create(table, columns);
}
else {
return common_table_expression_name_node_js_1.CommonTableExpressionNameNode.create(name);
}
}
;