@odyssoft/tsorm
Version:
TypeScript ORM for MySQL
55 lines (54 loc) • 2.28 kB
JavaScript
;
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Schema = void 0;
const promise_1 = require("mysql2/promise");
const model_1 = require("./model");
const utils_1 = require("./utils");
const view_1 = require("./view");
class Schema {
constructor(name, _a) {
var { create } = _a, connection = __rest(_a, ["create"]);
this.queries = [];
this.query = (sql) => this.connection.query(sql);
this.name = name;
this.connection = (0, promise_1.createPool)(Object.assign(Object.assign({}, connection), { multipleStatements: true }));
if (create) {
this.connection
.query(`CREATE DATABASE IF NOT EXISTS \`${name}\`; USE \`${name}\`;`)
.then(() => {
if (this.queries.length) {
this.connection.query(this.queries.join(';'));
}
})
.catch((error) => {
this.connection.end();
console.error({ error });
});
}
}
createModel(name, keys) {
const Keys = Object.keys(keys);
const primaries = Keys.filter((k) => keys[k].primaryKey).map((k) => `\`${k}\``);
this.queries.push(`CREATE TABLE IF NOT EXISTS \`${name}\` (${Keys.map((key) => (0, utils_1.mapKey)(key, keys[key])).join(', ')}${primaries.length ? `, PRIMARY KEY (${primaries.join(', ')})` : ''})`);
return (0, model_1.createModel)(name, keys, this.connection, this.name);
}
createView(name, keys, query) {
this.queries.push(`CREATE OR REPLACE VIEW \`${name}\` AS ${query}`);
return (0, view_1.createView)(name, keys, this.connection, this.name);
}
close() {
this.connection.end();
}
}
exports.Schema = Schema;