UNPKG

@odyssoft/tsorm

Version:
67 lines (66 loc) 2.76 kB
"use strict"; 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;