Roll Back compile version
This commit is contained in:
+19
-13
@@ -1,18 +1,24 @@
|
||||
import fs from "fs";
|
||||
import grabDirNames from "../../utils/backend/names/grab-dir-names";
|
||||
import _ from "lodash";
|
||||
import EJSON from "../../utils/ejson";
|
||||
import generateTypeDefinition from "./generate-type-definitions";
|
||||
import { AppNames } from "../../dict/app-names";
|
||||
export default function dbSchemaToType(params) {
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = dbSchemaToType;
|
||||
const fs_1 = __importDefault(require("fs"));
|
||||
const grab_dir_names_1 = __importDefault(require("../../utils/backend/names/grab-dir-names"));
|
||||
const lodash_1 = __importDefault(require("lodash"));
|
||||
const ejson_1 = __importDefault(require("../../utils/ejson"));
|
||||
const generate_type_definitions_1 = __importDefault(require("./generate-type-definitions"));
|
||||
const app_names_1 = require("../../dict/app-names");
|
||||
function dbSchemaToType(params) {
|
||||
var _a, _b;
|
||||
let datasquirelSchema;
|
||||
const { mainShemaJSONFilePath, defaultTableFieldsJSONFilePath } = grabDirNames();
|
||||
const { mainShemaJSONFilePath, defaultTableFieldsJSONFilePath } = (0, grab_dir_names_1.default)();
|
||||
if (params === null || params === void 0 ? void 0 : params.dbSchema) {
|
||||
datasquirelSchema = params.dbSchema;
|
||||
}
|
||||
else {
|
||||
const mainSchema = EJSON.parse(fs.readFileSync(mainShemaJSONFilePath, "utf-8"));
|
||||
const mainSchema = ejson_1.default.parse(fs_1.default.readFileSync(mainShemaJSONFilePath, "utf-8"));
|
||||
datasquirelSchema = mainSchema.find((sch) => sch.dbFullName == "datasquirel");
|
||||
}
|
||||
if (!datasquirelSchema)
|
||||
@@ -20,9 +26,9 @@ export default function dbSchemaToType(params) {
|
||||
let tableNames = `export const DsqlTables = [\n${datasquirelSchema.tables
|
||||
.map((tbl) => ` "${tbl.tableName}",`)
|
||||
.join("\n")}\n] as const`;
|
||||
const defaultFields = EJSON.parse(fs.readFileSync(defaultTableFieldsJSONFilePath, "utf-8"));
|
||||
const defaultFields = ejson_1.default.parse(fs_1.default.readFileSync(defaultTableFieldsJSONFilePath, "utf-8"));
|
||||
const dbTablesSchemas = datasquirelSchema.tables.map((tblSchm) => {
|
||||
let newDefaultFields = _.cloneDeep(defaultFields);
|
||||
let newDefaultFields = lodash_1.default.cloneDeep(defaultFields);
|
||||
return Object.assign(Object.assign({}, tblSchm), { fields: tblSchm.fields.find((fld) => fld.fieldName == "id")
|
||||
? tblSchm.fields
|
||||
: [
|
||||
@@ -33,9 +39,9 @@ export default function dbSchemaToType(params) {
|
||||
] });
|
||||
});
|
||||
const defDbName = (_b = (datasquirelSchema.dbName ||
|
||||
((_a = datasquirelSchema.dbFullName) === null || _a === void 0 ? void 0 : _a.replace(new RegExp(`${AppNames["DsqlDbPrefix"]}\\d+_`), "")))) === null || _b === void 0 ? void 0 : _b.toUpperCase().replace(/ /g, "_");
|
||||
((_a = datasquirelSchema.dbFullName) === null || _a === void 0 ? void 0 : _a.replace(new RegExp(`${app_names_1.AppNames["DsqlDbPrefix"]}\\d+_`), "")))) === null || _b === void 0 ? void 0 : _b.toUpperCase().replace(/ /g, "_");
|
||||
const schemas = dbTablesSchemas
|
||||
.map((table) => generateTypeDefinition({
|
||||
.map((table) => (0, generate_type_definitions_1.default)({
|
||||
paradigm: "TypeScript",
|
||||
table,
|
||||
typeDefName: `DSQL_${defDbName}_${table.tableName.toUpperCase()}`,
|
||||
|
||||
+14
-8
@@ -1,17 +1,23 @@
|
||||
"use strict";
|
||||
// @ts-check
|
||||
import { scryptSync, createDecipheriv } from "crypto";
|
||||
import { Buffer } from "buffer";
|
||||
import grabKeys from "../../utils/grab-keys";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = decrypt;
|
||||
const crypto_1 = require("crypto");
|
||||
const buffer_1 = require("buffer");
|
||||
const grab_keys_1 = __importDefault(require("../../utils/grab-keys"));
|
||||
/**
|
||||
* # Decrypt Function
|
||||
*/
|
||||
export default function decrypt({ encryptedString, encryptionKey, encryptionSalt, }) {
|
||||
function decrypt({ encryptedString, encryptionKey, encryptionSalt, }) {
|
||||
var _a;
|
||||
if (!(encryptedString === null || encryptedString === void 0 ? void 0 : encryptedString.match(/./))) {
|
||||
console.log("Encrypted string is invalid");
|
||||
return encryptedString;
|
||||
}
|
||||
const { key: encrptKey, salt, keyLen, algorithm, bufferAllocSize, } = grabKeys({ encryptionKey });
|
||||
const { key: encrptKey, salt, keyLen, algorithm, bufferAllocSize, } = (0, grab_keys_1.default)({ encryptionKey });
|
||||
if (!(encrptKey === null || encrptKey === void 0 ? void 0 : encrptKey.match(/.{8,}/))) {
|
||||
console.log("Decrption key is invalid");
|
||||
return encryptedString;
|
||||
@@ -20,9 +26,9 @@ export default function decrypt({ encryptedString, encryptionKey, encryptionSalt
|
||||
console.log("Decrption salt is invalid");
|
||||
return encryptedString;
|
||||
}
|
||||
let key = scryptSync(encrptKey, salt, keyLen);
|
||||
let iv = Buffer.alloc(bufferAllocSize, 0);
|
||||
const decipher = createDecipheriv(algorithm, key, iv);
|
||||
let key = (0, crypto_1.scryptSync)(encrptKey, salt, keyLen);
|
||||
let iv = buffer_1.Buffer.alloc(bufferAllocSize, 0);
|
||||
const decipher = (0, crypto_1.createDecipheriv)(algorithm, key, iv);
|
||||
try {
|
||||
let decrypted = decipher.update(encryptedString, "hex", "utf8");
|
||||
decrypted += decipher.final("utf8");
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
/**
|
||||
* Regular expression to match default fields
|
||||
*
|
||||
* @description Regular expression to match default fields
|
||||
*/
|
||||
const defaultFieldsRegexp = /^id$|^uuid$|^uid$|^date_created$|^date_created_code$|^date_created_timestamp$|^date_updated$|^date_updated_code$|^date_updated_timestamp$/;
|
||||
export default defaultFieldsRegexp;
|
||||
exports.default = defaultFieldsRegexp;
|
||||
|
||||
+14
-8
@@ -1,17 +1,23 @@
|
||||
"use strict";
|
||||
// @ts-check
|
||||
import { scryptSync, createCipheriv } from "crypto";
|
||||
import { Buffer } from "buffer";
|
||||
import grabKeys from "../../utils/grab-keys";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = encrypt;
|
||||
const crypto_1 = require("crypto");
|
||||
const buffer_1 = require("buffer");
|
||||
const grab_keys_1 = __importDefault(require("../../utils/grab-keys"));
|
||||
/**
|
||||
* # Encrypt String
|
||||
*/
|
||||
export default function encrypt({ data, encryptionKey, encryptionSalt, }) {
|
||||
function encrypt({ data, encryptionKey, encryptionSalt, }) {
|
||||
var _a;
|
||||
if (!(data === null || data === void 0 ? void 0 : data.match(/./))) {
|
||||
console.log("Encryption string is invalid");
|
||||
return data;
|
||||
}
|
||||
const { key: encrptKey, salt, keyLen, algorithm, bufferAllocSize, } = grabKeys({ encryptionKey });
|
||||
const { key: encrptKey, salt, keyLen, algorithm, bufferAllocSize, } = (0, grab_keys_1.default)({ encryptionKey });
|
||||
if (!(encrptKey === null || encrptKey === void 0 ? void 0 : encrptKey.match(/.{8,}/))) {
|
||||
console.log("Encryption key is invalid");
|
||||
return data;
|
||||
@@ -21,9 +27,9 @@ export default function encrypt({ data, encryptionKey, encryptionSalt, }) {
|
||||
return data;
|
||||
}
|
||||
const password = encrptKey;
|
||||
let key = scryptSync(password, salt, keyLen);
|
||||
let iv = Buffer.alloc(bufferAllocSize, 0);
|
||||
const cipher = createCipheriv(algorithm, key, iv);
|
||||
let key = (0, crypto_1.scryptSync)(password, salt, keyLen);
|
||||
let iv = buffer_1.Buffer.alloc(bufferAllocSize, 0);
|
||||
const cipher = (0, crypto_1.createCipheriv)(algorithm, key, iv);
|
||||
try {
|
||||
let encrypted = cipher.update(data, "utf8", "hex");
|
||||
encrypted += cipher.final("hex");
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
import defaultFieldsRegexp from "./default-fields-regexp";
|
||||
export default function generateTypeDefinition({ paradigm, table, query, typeDefName, allValuesOptional, addExport, dbName, }) {
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = generateTypeDefinition;
|
||||
const default_fields_regexp_1 = __importDefault(require("./default-fields-regexp"));
|
||||
function generateTypeDefinition({ paradigm, table, query, typeDefName, allValuesOptional, addExport, dbName, }) {
|
||||
let typeDefinition = ``;
|
||||
try {
|
||||
const tdName = typeDefName
|
||||
@@ -37,7 +43,7 @@ export default function generateTypeDefinition({ paradigm, table, query, typeDef
|
||||
var _a;
|
||||
const nullValue = allValuesOptional
|
||||
? "?"
|
||||
: ((_a = field.fieldName) === null || _a === void 0 ? void 0 : _a.match(defaultFieldsRegexp))
|
||||
: ((_a = field.fieldName) === null || _a === void 0 ? void 0 : _a.match(default_fields_regexp_1.default))
|
||||
? "?"
|
||||
: field.notNullValue
|
||||
? ""
|
||||
|
||||
+11
-5
@@ -1,14 +1,20 @@
|
||||
import { createHmac } from "crypto";
|
||||
import grabKeys from "../../utils/grab-keys";
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = hashPassword;
|
||||
const crypto_1 = require("crypto");
|
||||
const grab_keys_1 = __importDefault(require("../../utils/grab-keys"));
|
||||
/**
|
||||
* # Hash password Function
|
||||
*/
|
||||
export default function hashPassword({ password, encryptionKey, }) {
|
||||
const { key } = grabKeys({ encryptionKey });
|
||||
function hashPassword({ password, encryptionKey, }) {
|
||||
const { key } = (0, grab_keys_1.default)({ encryptionKey });
|
||||
if (!(key === null || key === void 0 ? void 0 : key.match(/.{8,}/))) {
|
||||
throw new Error("Encryption key is invalid");
|
||||
}
|
||||
const hmac = createHmac("sha512", key);
|
||||
const hmac = (0, crypto_1.createHmac)("sha512", key);
|
||||
hmac.update(password);
|
||||
let hashed = hmac.digest("base64");
|
||||
return hashed;
|
||||
|
||||
@@ -1,8 +1,14 @@
|
||||
import sqlEqualityParser from "../../../utils/sql-equality-parser";
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = sqlDeleteGenerator;
|
||||
const sql_equality_parser_1 = __importDefault(require("../../../utils/sql-equality-parser"));
|
||||
/**
|
||||
* # SQL Delete Generator
|
||||
*/
|
||||
export default function sqlDeleteGenerator({ tableName, deleteKeyValues, dbFullName, data, }) {
|
||||
function sqlDeleteGenerator({ tableName, deleteKeyValues, dbFullName, data, }) {
|
||||
const finalDbName = dbFullName ? `${dbFullName}.` : "";
|
||||
try {
|
||||
let queryStr = `DELETE FROM ${finalDbName}${tableName}`;
|
||||
@@ -30,7 +36,7 @@ export default function sqlDeleteGenerator({ tableName, deleteKeyValues, dbFullN
|
||||
const parsedValue = typeof value == "number" ? String(value) : value;
|
||||
if (!parsedValue)
|
||||
return;
|
||||
const operator = sqlEqualityParser(ky.operator || "EQUAL");
|
||||
const operator = (0, sql_equality_parser_1.default)(ky.operator || "EQUAL");
|
||||
deleteBatch.push(`${ky.key} ${operator} ?`);
|
||||
queryArr.push(parsedValue);
|
||||
});
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
import sqlEqualityParser from "../../../utils/sql-equality-parser";
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = sqlGenOperatorGen;
|
||||
const sql_equality_parser_1 = __importDefault(require("../../../utils/sql-equality-parser"));
|
||||
/**
|
||||
* # SQL Gen Operator Gen
|
||||
* @description Generates an SQL operator for node module `mysql` or `serverless-mysql`
|
||||
*/
|
||||
export default function sqlGenOperatorGen({ fieldName, value, equality, }) {
|
||||
function sqlGenOperatorGen({ fieldName, value, equality, }) {
|
||||
if (value) {
|
||||
if (equality == "LIKE") {
|
||||
return `LOWER(${fieldName}) LIKE LOWER('%${value}%')`;
|
||||
@@ -27,7 +33,7 @@ export default function sqlGenOperatorGen({ fieldName, value, equality, }) {
|
||||
return `${fieldName} != ${value}`;
|
||||
}
|
||||
else if (equality) {
|
||||
return `${fieldName} ${sqlEqualityParser(equality)} ${value}`;
|
||||
return `${fieldName} ${(0, sql_equality_parser_1.default)(equality)} ${value}`;
|
||||
}
|
||||
else {
|
||||
return `${fieldName} = ${value}`;
|
||||
@@ -41,7 +47,7 @@ export default function sqlGenOperatorGen({ fieldName, value, equality, }) {
|
||||
return `${fieldName} IS NOT NULL`;
|
||||
}
|
||||
else if (equality) {
|
||||
return `${fieldName} ${sqlEqualityParser(equality)} ?`;
|
||||
return `${fieldName} ${(0, sql_equality_parser_1.default)(equality)} ?`;
|
||||
}
|
||||
else {
|
||||
return `${fieldName} = ?`;
|
||||
|
||||
+9
-3
@@ -1,9 +1,15 @@
|
||||
import sqlEqualityParser from "../../../utils/sql-equality-parser";
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = sqlGenerator;
|
||||
const sql_equality_parser_1 = __importDefault(require("../../../utils/sql-equality-parser"));
|
||||
/**
|
||||
* # SQL Query Generator
|
||||
* @description Generates an SQL Query for node module `mysql` or `serverless-mysql`
|
||||
*/
|
||||
export default function sqlGenerator({ tableName, genObject, dbFullName, count }) {
|
||||
function sqlGenerator({ tableName, genObject, dbFullName, count }) {
|
||||
var _a;
|
||||
const finalQuery = (genObject === null || genObject === void 0 ? void 0 : genObject.query) ? genObject.query : undefined;
|
||||
const queryKeys = finalQuery ? Object.keys(finalQuery) : undefined;
|
||||
@@ -32,7 +38,7 @@ export default function sqlGenerator({ tableName, genObject, dbFullName, count }
|
||||
else if (typeof queryObj.value == "string" ||
|
||||
typeof queryObj.value == "number") {
|
||||
const valueParsed = String(queryObj.value);
|
||||
const operator = sqlEqualityParser(queryObj.equality || "EQUAL");
|
||||
const operator = (0, sql_equality_parser_1.default)(queryObj.equality || "EQUAL");
|
||||
if (queryObj.equality == "LIKE") {
|
||||
str = `LOWER(${finalFieldName}) LIKE LOWER('%${valueParsed}%')`;
|
||||
}
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
"use strict";
|
||||
// @ts-check
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = sqlInsertGenerator;
|
||||
/**
|
||||
* # SQL Insert Generator
|
||||
*/
|
||||
export default function sqlInsertGenerator({ tableName, data, dbFullName, }) {
|
||||
function sqlInsertGenerator({ tableName, data, dbFullName, }) {
|
||||
const finalDbName = dbFullName ? `${dbFullName}.` : "";
|
||||
try {
|
||||
if (Array.isArray(data) && (data === null || data === void 0 ? void 0 : data[0])) {
|
||||
|
||||
+79
-59
@@ -1,8 +1,22 @@
|
||||
import mysql from "mysql";
|
||||
import { exec } from "child_process";
|
||||
import { promisify } from "util";
|
||||
"use strict";
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
};
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const mysql_1 = __importDefault(require("mysql"));
|
||||
const child_process_1 = require("child_process");
|
||||
const util_1 = require("util");
|
||||
function getConnection(config) {
|
||||
return mysql.createConnection(config);
|
||||
return mysql_1.default.createConnection(config);
|
||||
}
|
||||
function getMasterStatus(config) {
|
||||
return new Promise((resolve, reject) => {
|
||||
@@ -16,67 +30,73 @@ function getMasterStatus(config) {
|
||||
});
|
||||
});
|
||||
}
|
||||
async function syncDatabases() {
|
||||
const config = {
|
||||
host: "localhost",
|
||||
user: "root",
|
||||
password: "your_password",
|
||||
};
|
||||
let lastPosition = null; // Track last synced position
|
||||
while (true) {
|
||||
try {
|
||||
// Get current master status
|
||||
const { File, Position } = await getMasterStatus(config);
|
||||
// Determine start position (use lastPosition or 4 if first run)
|
||||
const startPosition = lastPosition !== null ? lastPosition + 1 : 4;
|
||||
if (startPosition >= Position) {
|
||||
await new Promise((resolve) => setTimeout(resolve, 5000)); // Wait 5 seconds if no new changes
|
||||
continue;
|
||||
}
|
||||
// Execute mysqlbinlog to get changes
|
||||
const execPromise = promisify(exec);
|
||||
const { stdout } = await execPromise(`mysqlbinlog --database=db_master ${File} --start-position=${startPosition} --stop-position=${Position}`);
|
||||
if (stdout) {
|
||||
const connection = getConnection(Object.assign(Object.assign({}, config), { database: "db_slave" }));
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.query(stdout, (error) => {
|
||||
connection.end();
|
||||
if (error)
|
||||
reject(error);
|
||||
else {
|
||||
lastPosition = Position;
|
||||
console.log(`Synced up to position ${Position} at ${new Date().toISOString()}`);
|
||||
resolve(null);
|
||||
}
|
||||
function syncDatabases() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const config = {
|
||||
host: "localhost",
|
||||
user: "root",
|
||||
password: "your_password",
|
||||
};
|
||||
let lastPosition = null; // Track last synced position
|
||||
while (true) {
|
||||
try {
|
||||
// Get current master status
|
||||
const { File, Position } = yield getMasterStatus(config);
|
||||
// Determine start position (use lastPosition or 4 if first run)
|
||||
const startPosition = lastPosition !== null ? lastPosition + 1 : 4;
|
||||
if (startPosition >= Position) {
|
||||
yield new Promise((resolve) => setTimeout(resolve, 5000)); // Wait 5 seconds if no new changes
|
||||
continue;
|
||||
}
|
||||
// Execute mysqlbinlog to get changes
|
||||
const execPromise = (0, util_1.promisify)(child_process_1.exec);
|
||||
const { stdout } = yield execPromise(`mysqlbinlog --database=db_master ${File} --start-position=${startPosition} --stop-position=${Position}`);
|
||||
if (stdout) {
|
||||
const connection = getConnection(Object.assign(Object.assign({}, config), { database: "db_slave" }));
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.query(stdout, (error) => {
|
||||
connection.end();
|
||||
if (error)
|
||||
reject(error);
|
||||
else {
|
||||
lastPosition = Position;
|
||||
console.log(`Synced up to position ${Position} at ${new Date().toISOString()}`);
|
||||
resolve(null);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
console.error("Sync error:", error);
|
||||
}
|
||||
yield new Promise((resolve) => setTimeout(resolve, 5000)); // Check every 5 seconds
|
||||
}
|
||||
catch (error) {
|
||||
console.error("Sync error:", error);
|
||||
}
|
||||
await new Promise((resolve) => setTimeout(resolve, 5000)); // Check every 5 seconds
|
||||
}
|
||||
});
|
||||
}
|
||||
// Initialize db_slave with db_master data
|
||||
async function initializeSlave() {
|
||||
const config = {
|
||||
host: "localhost",
|
||||
user: "root",
|
||||
password: "your_password",
|
||||
};
|
||||
try {
|
||||
await promisify(exec)(`mysqldump -u ${config.user} -p${config.password} db_master > db_master_backup.sql`);
|
||||
await promisify(exec)(`mysql -u ${config.user} -p${config.password} db_slave < db_master_backup.sql`);
|
||||
console.log("Slave initialized with master data");
|
||||
}
|
||||
catch (error) {
|
||||
console.error("Initialization error:", error);
|
||||
}
|
||||
function initializeSlave() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const config = {
|
||||
host: "localhost",
|
||||
user: "root",
|
||||
password: "your_password",
|
||||
};
|
||||
try {
|
||||
yield (0, util_1.promisify)(child_process_1.exec)(`mysqldump -u ${config.user} -p${config.password} db_master > db_master_backup.sql`);
|
||||
yield (0, util_1.promisify)(child_process_1.exec)(`mysql -u ${config.user} -p${config.password} db_slave < db_master_backup.sql`);
|
||||
console.log("Slave initialized with master data");
|
||||
}
|
||||
catch (error) {
|
||||
console.error("Initialization error:", error);
|
||||
}
|
||||
});
|
||||
}
|
||||
// Run the sync process
|
||||
async function main() {
|
||||
await initializeSlave();
|
||||
await syncDatabases();
|
||||
function main() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
yield initializeSlave();
|
||||
yield syncDatabases();
|
||||
});
|
||||
}
|
||||
main().catch(console.error);
|
||||
|
||||
+6
-2
@@ -1,5 +1,9 @@
|
||||
export const TriggerParadigms = ["sync_tables", "sync_dbs"];
|
||||
export default function grabTriggerName({ userId, paradigm, dbId, tableName, }) {
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.TriggerParadigms = void 0;
|
||||
exports.default = grabTriggerName;
|
||||
exports.TriggerParadigms = ["sync_tables", "sync_dbs"];
|
||||
function grabTriggerName({ userId, paradigm, dbId, tableName, }) {
|
||||
let triggerName = `dsql_trig_${paradigm}`;
|
||||
if (userId)
|
||||
triggerName += `_${userId}`;
|
||||
|
||||
Vendored
+4
-1
@@ -1,3 +1,6 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = triggerSQLGen;
|
||||
const TriggerTypes = [
|
||||
{
|
||||
name: "after_insert",
|
||||
@@ -12,7 +15,7 @@ const TriggerTypes = [
|
||||
value: "DELETE",
|
||||
},
|
||||
];
|
||||
export default function triggerSQLGen({ type, srcDbSchema, srcTableSchema, content, proceedureName, }) {
|
||||
function triggerSQLGen({ type, srcDbSchema, srcTableSchema, content, proceedureName, }) {
|
||||
let sql = `DELIMITER //\n`;
|
||||
sql += `CREATE PROCEDURE ${proceedureName}`;
|
||||
sql += `\nBEGIN`;
|
||||
|
||||
+9
-3
@@ -1,5 +1,11 @@
|
||||
import triggerSQLGen from "./trigger-sql-gen";
|
||||
export default function tableReplicationTriggerSQLGen({ type, dstDbSchema, dstTableSchema, srcDbSchema, srcTableSchema, userId, paradigm, }) {
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = tableReplicationTriggerSQLGen;
|
||||
const trigger_sql_gen_1 = __importDefault(require("./trigger-sql-gen"));
|
||||
function tableReplicationTriggerSQLGen({ type, dstDbSchema, dstTableSchema, srcDbSchema, srcTableSchema, userId, paradigm, }) {
|
||||
let sql = `CREATE TRIGGER`;
|
||||
const srcColumns = srcTableSchema.fields
|
||||
.map((fld) => fld.fieldName)
|
||||
@@ -21,7 +27,7 @@ export default function tableReplicationTriggerSQLGen({ type, dstDbSchema, dstTa
|
||||
sql += ` DELETE FROM ${dstDbSchema.dbFullName}.${dstTableSchema.tableName}`;
|
||||
sql += ` WHERE id = OLD.id`;
|
||||
}
|
||||
return triggerSQLGen({
|
||||
return (0, trigger_sql_gen_1.default)({
|
||||
content: sql,
|
||||
srcDbSchema,
|
||||
srcTableSchema,
|
||||
|
||||
+9
-3
@@ -1,4 +1,10 @@
|
||||
import grabTriggerName from "./grab-trigger-name";
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = triggerSQLGen;
|
||||
const grab_trigger_name_1 = __importDefault(require("./grab-trigger-name"));
|
||||
const TriggerTypes = [
|
||||
{
|
||||
name: "after_insert",
|
||||
@@ -13,9 +19,9 @@ const TriggerTypes = [
|
||||
value: "DELETE",
|
||||
},
|
||||
];
|
||||
export default function triggerSQLGen({ type, srcDbSchema, srcTableSchema, content, userId, paradigm, }) {
|
||||
function triggerSQLGen({ type, srcDbSchema, srcTableSchema, content, userId, paradigm, }) {
|
||||
let sql = `CREATE TRIGGER`;
|
||||
let triggerName = grabTriggerName({
|
||||
let triggerName = (0, grab_trigger_name_1.default)({
|
||||
paradigm,
|
||||
dbId: srcDbSchema.id,
|
||||
tableName: srcTableSchema.tableName,
|
||||
|
||||
Reference in New Issue
Block a user