From 95318307fe2c273f6ae88a7f7882202186622d60 Mon Sep 17 00:00:00 2001
From: Benjamin Toby <benoti.san@gmail.com>
Date: Wed, 12 Feb 2025 11:52:25 +0100
Subject: [PATCH] Bugfix

---
 .../package-shared/functions/api/query/get.js |  4 +-
 .../shell/createDbFromSchema.js               |  9 +++--
 .../backend/export-mariadb-database.d.ts      |  8 ++++
 .../utils/backend/export-mariadb-database.js  | 24 ++++++++++++
 package-shared/functions/api/query/get.ts     |  8 +---
 package-shared/shell/createDbFromSchema.ts    | 12 +++---
 .../utils/backend/export-mariadb-database.ts  | 38 +++++++++++++++++++
 package.json                                  |  2 +-
 8 files changed, 84 insertions(+), 21 deletions(-)
 create mode 100644 dist/package-shared/utils/backend/export-mariadb-database.d.ts
 create mode 100644 dist/package-shared/utils/backend/export-mariadb-database.js
 create mode 100644 package-shared/utils/backend/export-mariadb-database.ts

diff --git a/dist/package-shared/functions/api/query/get.js b/dist/package-shared/functions/api/query/get.js
index 048e390..503163b 100644
--- a/dist/package-shared/functions/api/query/get.js
+++ b/dist/package-shared/functions/api/query/get.js
@@ -1,5 +1,4 @@
 "use strict";
-// @ts-check
 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) {
@@ -27,8 +26,7 @@ function apiGet(_a) {
             query,
             values: queryValues,
         });
-        if (typeof query == "string" &&
-            query.match(/^alter|^delete|information_schema|databases|^create/i)) {
+        if (typeof query == "string" && query.match(/^alter|^delete|^create/i)) {
             return { success: false, msg: "Wrong Input." };
         }
         let results;
diff --git a/dist/package-shared/shell/createDbFromSchema.js b/dist/package-shared/shell/createDbFromSchema.js
index 739e13a..d52b325 100644
--- a/dist/package-shared/shell/createDbFromSchema.js
+++ b/dist/package-shared/shell/createDbFromSchema.js
@@ -13,7 +13,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
 };
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = createDbFromSchema;
-const path_1 = __importDefault(require("path"));
 const fs_1 = __importDefault(require("fs"));
 const noDatabaseDbHandler_1 = __importDefault(require("./utils/noDatabaseDbHandler"));
 const varDatabaseDbHandler_1 = __importDefault(require("./utils/varDatabaseDbHandler"));
@@ -21,6 +20,7 @@ const createTable_1 = __importDefault(require("./utils/createTable"));
 const updateTable_1 = __importDefault(require("./utils/updateTable"));
 const dbHandler_1 = __importDefault(require("./utils/dbHandler"));
 const ejson_1 = __importDefault(require("../utils/ejson"));
+const grab_dir_names_1 = __importDefault(require("@/utils/backend/names/grab-dir-names"));
 /**
  * # Create database from Schema Function
  * @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database
@@ -28,9 +28,10 @@ const ejson_1 = __importDefault(require("../utils/ejson"));
 function createDbFromSchema(_a) {
     return __awaiter(this, arguments, void 0, function* ({ userId, targetDatabase, dbSchemaData, }) {
         var _b, _c;
-        const schemaPath = userId
-            ? path_1.default.join(String(process.env.DSQL_USER_DB_SCHEMA_PATH), `/user-${userId}/main.json`)
-            : path_1.default.resolve(__dirname, "../../jsonData/dbSchemas/main.json");
+        const { userSchemaMainJSONFilePath, mainShemaJSONFilePath } = (0, grab_dir_names_1.default)({
+            userId,
+        });
+        const schemaPath = userSchemaMainJSONFilePath || mainShemaJSONFilePath;
         const dbSchema = dbSchemaData ||
             ejson_1.default.parse(fs_1.default.readFileSync(schemaPath, "utf8"));
         if (!dbSchema) {
diff --git a/dist/package-shared/utils/backend/export-mariadb-database.d.ts b/dist/package-shared/utils/backend/export-mariadb-database.d.ts
new file mode 100644
index 0000000..1da21da
--- /dev/null
+++ b/dist/package-shared/utils/backend/export-mariadb-database.d.ts
@@ -0,0 +1,8 @@
+export type ExportMariaDBDatabaseParam = {
+    dbFullName: string;
+    targetFilePath: string;
+    mariadbUser?: string;
+    mariadbHost?: string;
+    mariadbPass?: string;
+};
+export default function exportMariadbDatabase({ dbFullName, targetFilePath, mariadbHost, mariadbPass, mariadbUser, }: ExportMariaDBDatabaseParam): string | Buffer<ArrayBufferLike>;
diff --git a/dist/package-shared/utils/backend/export-mariadb-database.js b/dist/package-shared/utils/backend/export-mariadb-database.js
new file mode 100644
index 0000000..b8392ae
--- /dev/null
+++ b/dist/package-shared/utils/backend/export-mariadb-database.js
@@ -0,0 +1,24 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = exportMariadbDatabase;
+const child_process_1 = require("child_process");
+const os_1 = __importDefault(require("os"));
+function exportMariadbDatabase({ dbFullName, targetFilePath, mariadbHost, mariadbPass, mariadbUser, }) {
+    const mysqlDumpPath = os_1.default.platform().match(/win/i)
+        ? "'" +
+            "C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin\\mysqldump.exe" +
+            "'"
+        : "mysqldump";
+    const finalMariadbUser = mariadbUser || process.env.DSQL_DB_USERNAME;
+    const finalMariadbHost = mariadbHost || process.env.DSQL_DB_HOST;
+    const finalMariadbPass = mariadbPass || process.env.DSQL_DB_PASSWORD;
+    const cmd = `${mysqlDumpPath} -u ${finalMariadbUser} -h ${finalMariadbHost} -p${finalMariadbPass} ${dbFullName} > ${targetFilePath}`;
+    let execSyncOptions = {
+        encoding: "utf-8",
+    };
+    const dumpDb = (0, child_process_1.execSync)(cmd, execSyncOptions);
+    return dumpDb;
+}
diff --git a/package-shared/functions/api/query/get.ts b/package-shared/functions/api/query/get.ts
index 8f2afc9..1f1af4f 100644
--- a/package-shared/functions/api/query/get.ts
+++ b/package-shared/functions/api/query/get.ts
@@ -1,5 +1,3 @@
-// @ts-check
-
 import _ from "lodash";
 import serverError from "../../backend/serverError";
 import runQuery, { DbContextsArray } from "../../backend/db/runQuery";
@@ -7,7 +5,6 @@ import {
     ApiGetQueryObject,
     DSQL_TableSchemaType,
     GetReturn,
-    ServerQueryParam,
 } from "../../../types";
 import apiGetGrabQueryAndValues from "../../../utils/grab-query-and-values";
 
@@ -40,10 +37,7 @@ export default async function apiGet<
         values: queryValues,
     });
 
-    if (
-        typeof query == "string" &&
-        query.match(/^alter|^delete|information_schema|databases|^create/i)
-    ) {
+    if (typeof query == "string" && query.match(/^alter|^delete|^create/i)) {
         return { success: false, msg: "Wrong Input." };
     }
 
diff --git a/package-shared/shell/createDbFromSchema.ts b/package-shared/shell/createDbFromSchema.ts
index b21c76b..5f37bf1 100644
--- a/package-shared/shell/createDbFromSchema.ts
+++ b/package-shared/shell/createDbFromSchema.ts
@@ -8,6 +8,7 @@ import updateTable from "./utils/updateTable";
 import dbHandler from "./utils/dbHandler";
 import EJSON from "../utils/ejson";
 import { DSQL_DatabaseSchemaType } from "../types";
+import grabDirNames from "@/utils/backend/names/grab-dir-names";
 
 type Param = {
     userId?: number | string | null;
@@ -24,12 +25,11 @@ export default async function createDbFromSchema({
     targetDatabase,
     dbSchemaData,
 }: Param) {
-    const schemaPath = userId
-        ? path.join(
-              String(process.env.DSQL_USER_DB_SCHEMA_PATH),
-              `/user-${userId}/main.json`
-          )
-        : path.resolve(__dirname, "../../jsonData/dbSchemas/main.json");
+    const { userSchemaMainJSONFilePath, mainShemaJSONFilePath } = grabDirNames({
+        userId,
+    });
+
+    const schemaPath = userSchemaMainJSONFilePath || mainShemaJSONFilePath;
 
     const dbSchema: DSQL_DatabaseSchemaType[] | undefined =
         dbSchemaData ||
diff --git a/package-shared/utils/backend/export-mariadb-database.ts b/package-shared/utils/backend/export-mariadb-database.ts
new file mode 100644
index 0000000..65bda23
--- /dev/null
+++ b/package-shared/utils/backend/export-mariadb-database.ts
@@ -0,0 +1,38 @@
+import { execSync, ExecSyncOptions } from "child_process";
+import os from "os";
+
+export type ExportMariaDBDatabaseParam = {
+    dbFullName: string;
+    targetFilePath: string;
+    mariadbUser?: string;
+    mariadbHost?: string;
+    mariadbPass?: string;
+};
+
+export default function exportMariadbDatabase({
+    dbFullName,
+    targetFilePath,
+    mariadbHost,
+    mariadbPass,
+    mariadbUser,
+}: ExportMariaDBDatabaseParam) {
+    const mysqlDumpPath = os.platform().match(/win/i)
+        ? "'" +
+          "C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin\\mysqldump.exe" +
+          "'"
+        : "mysqldump";
+
+    const finalMariadbUser = mariadbUser || process.env.DSQL_DB_USERNAME;
+    const finalMariadbHost = mariadbHost || process.env.DSQL_DB_HOST;
+    const finalMariadbPass = mariadbPass || process.env.DSQL_DB_PASSWORD;
+
+    const cmd = `${mysqlDumpPath} -u ${finalMariadbUser} -h ${finalMariadbHost} -p${finalMariadbPass} ${dbFullName} > ${targetFilePath}`;
+
+    let execSyncOptions: ExecSyncOptions = {
+        encoding: "utf-8",
+    };
+
+    const dumpDb = execSync(cmd, execSyncOptions);
+
+    return dumpDb;
+}
diff --git a/package.json b/package.json
index 9fc931c..e678956 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
     "name": "@moduletrace/datasquirel",
-    "version": "4.0.4",
+    "version": "4.0.5",
     "description": "Cloud-based SQL data management tool",
     "main": "dist/index.js",
     "bin": {