@odyssoft/tsorm
Version:
TypeScript ORM for MySQL
67 lines (66 loc) • 2.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.sql = exports.aliasModel = void 0;
const utils_1 = require("./utils");
function aliasModel(alias, name, keys, connection) {
return {
alias,
keys: Object.keys(keys).map((key) => `${alias}.${key}`),
name,
joins: [],
SQL() {
return sql(alias, name, this.keys, this.joins);
},
join(model, join, on) {
this.keys.push(...model.keys);
this.joins.push(`${join} JOIN ${model.name} AS ${model.alias} ON ${(0, utils_1.parseOptions)(on, this.keys)}`);
return Object.assign(Object.assign({}, this), { SQL() {
return sql(alias, name, this.keys, this.joins);
} });
},
crossJoin(model, on) {
return this.join(model, 'CROSS', on);
},
innerJoin(model, on) {
return this.join(model, 'INNER', on);
},
leftJoin(model, on) {
return this.join(model, 'LEFT', on);
},
leftOuterJoin(model, on) {
return this.join(model, 'LEFT OUTER', on);
},
rightJoin(model, on) {
return this.join(model, 'RIGHT', on);
},
rightOuterJoin(model, on) {
return this.join(model, 'RIGHT OUTER', on);
},
select(query) {
return connection
.query(this.SQL().select(query))
.then(([rows]) => rows);
},
};
}
exports.aliasModel = aliasModel;
function sql(alias, name, keys, joins) {
return {
select(query) {
var _a, _b;
const sql = [
`SELECT ${(_b = (_a = query === null || query === void 0 ? void 0 : query.$columns) === null || _a === void 0 ? void 0 : _a.join(', ')) !== null && _b !== void 0 ? _b : '*'} FROM ${name} AS ${alias}`,
];
joins.length && sql.push(joins.join(' '));
(query === null || query === void 0 ? void 0 : query.$where) && sql.push(`WHERE ${(0, utils_1.parseOptions)(query.$where, keys)}`);
(query === null || query === void 0 ? void 0 : query.$groupBy) &&
sql.push(`GROUP BY ${Array.isArray(query.$groupBy) ? query.$groupBy.join(', ') : query.$groupBy}`);
(query === null || query === void 0 ? void 0 : query.$orderBy) &&
sql.push(`ORDER BY ${Array.isArray(query.$orderBy) ? query.$orderBy.join(', ') : query.$orderBy}`);
(query === null || query === void 0 ? void 0 : query.$limit) &&
sql.push(`LIMIT ${Array.isArray(query.$limit) ? query.$limit.join(', ') : query.$limit}`);
return sql.join(' ');
},
};
}
exports.sql = sql;