Updates
This commit is contained in:
@@ -2,13 +2,13 @@
|
||||
|
||||
import _ from "lodash";
|
||||
import serverError from "../../backend/serverError";
|
||||
import runQuery from "../../backend/db/runQuery";
|
||||
import runQuery, { DbContextsArray } from "../../backend/db/runQuery";
|
||||
import {
|
||||
DSQL_TableSchemaType,
|
||||
GetReturn,
|
||||
ServerQueryParam,
|
||||
} from "../../../types";
|
||||
import apiGetGrabQueryAndValues from "../../../../utils/get/(utils)/grab-query-and-values";
|
||||
import apiGetGrabQueryAndValues from "../../../utils/grab-query-and-values";
|
||||
|
||||
type Param = {
|
||||
query:
|
||||
@@ -22,6 +22,7 @@ type Param = {
|
||||
tableName?: string;
|
||||
dbSchema?: import("../../../types").DSQL_DatabaseSchemaType;
|
||||
debug?: boolean;
|
||||
dbContext?: (typeof DbContextsArray)[number];
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -34,6 +35,7 @@ export default async function apiGet({
|
||||
tableName,
|
||||
dbSchema,
|
||||
debug,
|
||||
dbContext,
|
||||
}: Param): Promise<import("../../../types").GetReturn> {
|
||||
const queryAndValues = apiGetGrabQueryAndValues({
|
||||
query,
|
||||
@@ -57,6 +59,8 @@ export default async function apiGet({
|
||||
readOnly: true,
|
||||
dbSchema,
|
||||
tableName,
|
||||
dbContext,
|
||||
debug,
|
||||
});
|
||||
|
||||
if (debug && global.DSQL_USE_LOCAL) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import _ from "lodash";
|
||||
import serverError from "../../backend/serverError";
|
||||
import runQuery from "../../backend/db/runQuery";
|
||||
import runQuery, { DbContextsArray } from "../../backend/db/runQuery";
|
||||
import { DSQL_DatabaseSchemaType, PostReturn } from "../../../types";
|
||||
|
||||
type Param = {
|
||||
@@ -9,6 +9,7 @@ type Param = {
|
||||
dbFullName: string;
|
||||
tableName?: string;
|
||||
dbSchema?: DSQL_DatabaseSchemaType;
|
||||
dbContext?: (typeof DbContextsArray)[number];
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -20,6 +21,7 @@ export default async function apiPost({
|
||||
queryValues,
|
||||
tableName,
|
||||
dbSchema,
|
||||
dbContext,
|
||||
}: Param): Promise<PostReturn> {
|
||||
if (typeof query === "string" && query?.match(/^create |^alter |^drop /i)) {
|
||||
return { success: false, msg: "Wrong Input" };
|
||||
@@ -47,6 +49,7 @@ export default async function apiPost({
|
||||
dbSchema: dbSchema,
|
||||
queryValuesArray: queryValues,
|
||||
tableName,
|
||||
dbContext,
|
||||
});
|
||||
|
||||
results = result;
|
||||
|
||||
@@ -1,16 +1,14 @@
|
||||
// @ts-check
|
||||
|
||||
import sanitizeHtml from "sanitize-html";
|
||||
import sanitizeHtmlOptions from "../html/sanitizeHtmlOptions";
|
||||
import updateDbEntry from "./updateDbEntry";
|
||||
import _ from "lodash";
|
||||
import DB_HANDLER from "../../../utils/backend/global-db/DB_HANDLER";
|
||||
import DSQL_USER_DB_HANDLER from "../../../utils/backend/global-db/DSQL_USER_DB_HANDLER";
|
||||
import encrypt from "../../dsql/encrypt";
|
||||
import LOCAL_DB_HANDLER from "../../../utils/backend/global-db/LOCAL_DB_HANDLER";
|
||||
import connDbHandler from "../../../utils/db/conn-db-handler";
|
||||
import checkIfIsMaster from "../../../utils/check-if-is-master";
|
||||
import { DbContextsArray } from "./runQuery";
|
||||
|
||||
type Param = {
|
||||
dbContext?: "Master" | "Dsql User";
|
||||
dbContext?: (typeof DbContextsArray)[number];
|
||||
paradigm?: "Read Only" | "Full Access";
|
||||
dbFullName?: string;
|
||||
tableName: string;
|
||||
@@ -42,20 +40,14 @@ export default async function addDbEntry({
|
||||
/**
|
||||
* Initialize variables
|
||||
*/
|
||||
const isMaster = global.DSQL_USE_LOCAL
|
||||
? true
|
||||
: dbContext?.match(/dsql.user/i)
|
||||
? false
|
||||
: dbFullName && !dbFullName.match(/^datasquirel$/)
|
||||
? false
|
||||
: true;
|
||||
const isMaster = checkIfIsMaster({ dbContext, dbFullName });
|
||||
|
||||
/** @type { any } */
|
||||
const dbHandler: any = global.DSQL_USE_LOCAL
|
||||
? LOCAL_DB_HANDLER
|
||||
: isMaster
|
||||
? DB_HANDLER
|
||||
: DSQL_USER_DB_HANDLER;
|
||||
const DB_CONN = isMaster
|
||||
? global.DSQL_DB_CONN
|
||||
: global.DSQL_FULL_ACCESS_DB_CONN || global.DSQL_DB_CONN;
|
||||
const DB_RO_CONN = isMaster
|
||||
? global.DSQL_DB_CONN
|
||||
: global.DSQL_READ_ONLY_DB_CONN || global.DSQL_DB_CONN;
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
@@ -72,28 +64,22 @@ export default async function addDbEntry({
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Handle function logic
|
||||
*/
|
||||
|
||||
if (duplicateColumnName && typeof duplicateColumnName === "string") {
|
||||
const duplicateValue = isMaster
|
||||
? await dbHandler(
|
||||
`SELECT * FROM \`${tableName}\` WHERE \`${duplicateColumnName}\`=?`,
|
||||
[duplicateColumnValue]
|
||||
)
|
||||
: await dbHandler({
|
||||
paradigm: "Read Only",
|
||||
queryString: `SELECT * FROM \`${dbFullName}\`.\`${tableName}\` WHERE \`${duplicateColumnName}\`=?`,
|
||||
queryValues: [duplicateColumnValue],
|
||||
});
|
||||
const checkDuplicateQuery = `SELECT * FROM ${
|
||||
isMaster ? "" : `\`${dbFullName}\`.`
|
||||
}\`${tableName}\` WHERE \`${duplicateColumnName}\`=?`;
|
||||
|
||||
const duplicateValue = await connDbHandler(
|
||||
DB_RO_CONN,
|
||||
checkDuplicateQuery,
|
||||
[duplicateColumnValue]
|
||||
);
|
||||
|
||||
if (duplicateValue?.[0] && !update) {
|
||||
return null;
|
||||
} else if (duplicateValue && duplicateValue[0] && update) {
|
||||
return await updateDbEntry({
|
||||
dbContext,
|
||||
paradigm,
|
||||
dbFullName,
|
||||
tableName,
|
||||
data,
|
||||
@@ -178,7 +164,7 @@ export default async function addDbEntry({
|
||||
} else {
|
||||
insertValuesArray.push(value);
|
||||
}
|
||||
} catch (/** @type {any} */ error: any) {
|
||||
} catch (error: any) {
|
||||
console.log("DSQL: Error in parsing data keys =>", error.message);
|
||||
continue;
|
||||
}
|
||||
@@ -210,18 +196,14 @@ export default async function addDbEntry({
|
||||
|
||||
////////////////////////////////////////
|
||||
|
||||
const query = `INSERT INTO \`${dbFullName}\`.\`${tableName}\` (${insertKeysArray.join(
|
||||
","
|
||||
)}) VALUES (${insertValuesArray.map(() => "?").join(",")})`;
|
||||
const query = `INSERT INTO ${
|
||||
isMaster ? "" : `\`${dbFullName}\`.`
|
||||
}\`${tableName}\` (${insertKeysArray.join(",")}) VALUES (${insertValuesArray
|
||||
.map(() => "?")
|
||||
.join(",")})`;
|
||||
const queryValuesArray = insertValuesArray;
|
||||
|
||||
const newInsert = isMaster
|
||||
? await dbHandler(query, queryValuesArray)
|
||||
: await dbHandler({
|
||||
paradigm,
|
||||
queryString: query,
|
||||
queryValues: queryValuesArray,
|
||||
});
|
||||
const newInsert = await connDbHandler(DB_CONN, query, queryValuesArray);
|
||||
|
||||
/**
|
||||
* Return statement
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
import DB_HANDLER from "../../../utils/backend/global-db/DB_HANDLER";
|
||||
import DSQL_USER_DB_HANDLER from "../../../utils/backend/global-db/DSQL_USER_DB_HANDLER";
|
||||
import LOCAL_DB_HANDLER from "../../../utils/backend/global-db/LOCAL_DB_HANDLER";
|
||||
import checkIfIsMaster from "../../../utils/check-if-is-master";
|
||||
import connDbHandler from "../../../utils/db/conn-db-handler";
|
||||
import { DbContextsArray } from "./runQuery";
|
||||
|
||||
type Param = {
|
||||
dbContext?: string;
|
||||
paradigm?: "Read Only" | "Full Access";
|
||||
dbContext?: (typeof DbContextsArray)[number];
|
||||
dbFullName: string;
|
||||
tableName: string;
|
||||
tableSchema?: import("../../../types").DSQL_TableSchemaType;
|
||||
@@ -18,41 +17,33 @@ type Param = {
|
||||
*/
|
||||
export default async function deleteDbEntry({
|
||||
dbContext,
|
||||
paradigm,
|
||||
dbFullName,
|
||||
tableName,
|
||||
identifierColumnName,
|
||||
identifierValue,
|
||||
}: Param): Promise<object | null> {
|
||||
try {
|
||||
const isMaster = global.DSQL_USE_LOCAL
|
||||
? true
|
||||
: dbContext?.match(/dsql.user/i)
|
||||
? false
|
||||
: dbFullName && !dbFullName.match(/^datasquirel$/)
|
||||
? false
|
||||
: true;
|
||||
const isMaster = checkIfIsMaster({ dbContext, dbFullName });
|
||||
|
||||
const dbHandler: (a1: any, a2?: any) => any = global.DSQL_USE_LOCAL
|
||||
? LOCAL_DB_HANDLER
|
||||
: isMaster
|
||||
? DB_HANDLER
|
||||
: DSQL_USER_DB_HANDLER;
|
||||
const DB_CONN = isMaster
|
||||
? global.DSQL_DB_CONN
|
||||
: global.DSQL_FULL_ACCESS_DB_CONN || global.DSQL_DB_CONN;
|
||||
const DB_RO_CONN = isMaster
|
||||
? global.DSQL_DB_CONN
|
||||
: global.DSQL_READ_ONLY_DB_CONN || global.DSQL_DB_CONN;
|
||||
|
||||
/**
|
||||
* Execution
|
||||
*
|
||||
* @description
|
||||
*/
|
||||
const query = `DELETE FROM \`${dbFullName}\`.\`${tableName}\` WHERE \`${identifierColumnName}\`=?`;
|
||||
const query = `DELETE FROM ${
|
||||
isMaster ? "" : `\`${dbFullName}\`.`
|
||||
}\`${tableName}\` WHERE \`${identifierColumnName}\`=?`;
|
||||
|
||||
const deletedEntry = isMaster
|
||||
? await dbHandler(query, [identifierValue])
|
||||
: await dbHandler({
|
||||
paradigm,
|
||||
queryString: query,
|
||||
queryValues: [identifierValue],
|
||||
});
|
||||
const deletedEntry = await connDbHandler(DB_CONN, query, [
|
||||
identifierValue,
|
||||
]);
|
||||
|
||||
/**
|
||||
* Return statement
|
||||
|
||||
@@ -7,7 +7,10 @@ import deleteDbEntry from "./deleteDbEntry";
|
||||
import trimSql from "../../../utils/trim-sql";
|
||||
import { DSQL_TableSchemaType } from "../../../types";
|
||||
|
||||
export const DbContextsArray = ["Master", "Dsql User"] as const;
|
||||
|
||||
type Param = {
|
||||
dbContext?: (typeof DbContextsArray)[number];
|
||||
dbFullName: string;
|
||||
query: string | any;
|
||||
readOnly?: boolean;
|
||||
@@ -28,6 +31,7 @@ export default async function runQuery({
|
||||
queryValuesArray,
|
||||
tableName,
|
||||
debug,
|
||||
dbContext,
|
||||
}: Param): Promise<any> {
|
||||
/**
|
||||
* Declare variables
|
||||
@@ -117,10 +121,7 @@ export default async function runQuery({
|
||||
switch (action.toLowerCase()) {
|
||||
case "insert":
|
||||
result = await addDbEntry({
|
||||
dbContext: global.DSQL_USE_LOCAL
|
||||
? "Master"
|
||||
: "Dsql User",
|
||||
paradigm: "Full Access",
|
||||
dbContext,
|
||||
dbFullName: dbFullName,
|
||||
tableName: table,
|
||||
data: data,
|
||||
@@ -138,10 +139,7 @@ export default async function runQuery({
|
||||
|
||||
case "update":
|
||||
result = await updateDbEntry({
|
||||
dbContext: global.DSQL_USE_LOCAL
|
||||
? "Master"
|
||||
: "Dsql User",
|
||||
paradigm: "Full Access",
|
||||
dbContext,
|
||||
dbFullName: dbFullName,
|
||||
tableName: table,
|
||||
data: data,
|
||||
@@ -154,10 +152,7 @@ export default async function runQuery({
|
||||
|
||||
case "delete":
|
||||
result = await deleteDbEntry({
|
||||
dbContext: global.DSQL_USE_LOCAL
|
||||
? "Master"
|
||||
: "Dsql User",
|
||||
paradigm: "Full Access",
|
||||
dbContext,
|
||||
dbFullName: dbFullName,
|
||||
tableName: table,
|
||||
identifierColumnName,
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
import sanitizeHtml from "sanitize-html";
|
||||
import sanitizeHtmlOptions from "../html/sanitizeHtmlOptions";
|
||||
import DB_HANDLER from "../../../utils/backend/global-db/DB_HANDLER";
|
||||
import DSQL_USER_DB_HANDLER from "../../../utils/backend/global-db/DSQL_USER_DB_HANDLER";
|
||||
import encrypt from "../../dsql/encrypt";
|
||||
import LOCAL_DB_HANDLER from "../../../utils/backend/global-db/LOCAL_DB_HANDLER";
|
||||
import checkIfIsMaster from "../../../utils/check-if-is-master";
|
||||
import connDbHandler from "../../../utils/db/conn-db-handler";
|
||||
import { DbContextsArray } from "./runQuery";
|
||||
|
||||
type Param = {
|
||||
dbContext?: "Master" | "Dsql User";
|
||||
paradigm?: "Read Only" | "Full Access";
|
||||
dbContext?: (typeof DbContextsArray)[number];
|
||||
dbFullName?: string;
|
||||
tableName: string;
|
||||
encryptionKey?: string;
|
||||
@@ -24,7 +23,6 @@ type Param = {
|
||||
*/
|
||||
export default async function updateDbEntry({
|
||||
dbContext,
|
||||
paradigm,
|
||||
dbFullName,
|
||||
tableName,
|
||||
data,
|
||||
@@ -39,20 +37,14 @@ export default async function updateDbEntry({
|
||||
*/
|
||||
if (!data || !Object.keys(data).length) return null;
|
||||
|
||||
const isMaster = global.DSQL_USE_LOCAL
|
||||
? true
|
||||
: dbContext?.match(/dsql.user/i)
|
||||
? false
|
||||
: dbFullName && !dbFullName.match(/^datasquirel$/)
|
||||
? false
|
||||
: true;
|
||||
const isMaster = checkIfIsMaster({ dbContext, dbFullName });
|
||||
|
||||
/** @type {(a1:any, a2?:any)=> any } */
|
||||
const dbHandler: (a1: any, a2?: any) => any = global.DSQL_USE_LOCAL
|
||||
? LOCAL_DB_HANDLER
|
||||
: isMaster
|
||||
? DB_HANDLER
|
||||
: DSQL_USER_DB_HANDLER;
|
||||
const DB_CONN = isMaster
|
||||
? global.DSQL_DB_CONN
|
||||
: global.DSQL_FULL_ACCESS_DB_CONN || global.DSQL_DB_CONN;
|
||||
const DB_RO_CONN = isMaster
|
||||
? global.DSQL_DB_CONN
|
||||
: global.DSQL_READ_ONLY_DB_CONN || global.DSQL_DB_CONN;
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
@@ -162,19 +154,15 @@ export default async function updateDbEntry({
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
const query = `UPDATE \`${dbFullName}\`.\`${tableName}\` SET ${updateKeyValueArray.join(
|
||||
const query = `UPDATE ${
|
||||
isMaster ? "" : `\`${dbFullName}\`.`
|
||||
}\`${tableName}\` SET ${updateKeyValueArray.join(
|
||||
","
|
||||
)} WHERE \`${identifierColumnName}\`=?`;
|
||||
|
||||
updateValues.push(identifierValue);
|
||||
|
||||
const updatedEntry = isMaster
|
||||
? await dbHandler(query, updateValues)
|
||||
: await dbHandler({
|
||||
paradigm,
|
||||
queryString: query,
|
||||
queryValues: updateValues,
|
||||
});
|
||||
const updatedEntry = await connDbHandler(DB_CONN, query, updateValues);
|
||||
|
||||
/**
|
||||
* Return statement
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
// @ts-check
|
||||
|
||||
import DSQL_USER_DB_HANDLER from "../../utils/backend/global-db/DSQL_USER_DB_HANDLER";
|
||||
import LOCAL_DB_HANDLER from "../../utils/backend/global-db/LOCAL_DB_HANDLER";
|
||||
import connDbHandler from "../../utils/db/conn-db-handler";
|
||||
import parseDbResults from "./parseDbResults";
|
||||
import serverError from "./serverError";
|
||||
|
||||
@@ -26,24 +23,18 @@ export default async function fullAccessDbHandler({
|
||||
*/
|
||||
let results;
|
||||
|
||||
const DB_CONN = global.DSQL_FULL_ACCESS_DB_CONN || global.DSQL_DB_CONN;
|
||||
|
||||
/**
|
||||
* Fetch from db
|
||||
*
|
||||
* @description Fetch data from db if no cache
|
||||
*/
|
||||
try {
|
||||
/** ********************* Run Query */
|
||||
|
||||
results = global.DSQL_USE_LOCAL
|
||||
? await LOCAL_DB_HANDLER(queryString, queryValuesArray)
|
||||
: await DSQL_USER_DB_HANDLER({
|
||||
paradigm: "Full Access",
|
||||
queryString,
|
||||
queryValues: queryValuesArray,
|
||||
});
|
||||
results = await connDbHandler(DB_CONN, queryString, queryValuesArray);
|
||||
|
||||
////////////////////////////////////////
|
||||
} catch (/** @type {any} */ error: any) {
|
||||
} catch (error: any) {
|
||||
////////////////////////////////////////
|
||||
|
||||
serverError({
|
||||
@@ -55,6 +46,8 @@ export default async function fullAccessDbHandler({
|
||||
* Return error
|
||||
*/
|
||||
return error.message;
|
||||
} finally {
|
||||
DB_CONN?.end();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
// @ts-check
|
||||
|
||||
import fs from "fs";
|
||||
import serverError from "./serverError";
|
||||
import parseDbResults from "./parseDbResults";
|
||||
import DSQL_USER_DB_HANDLER from "../../utils/backend/global-db/DSQL_USER_DB_HANDLER";
|
||||
import LOCAL_DB_HANDLER from "../../utils/backend/global-db/LOCAL_DB_HANDLER";
|
||||
import connDbHandler from "../../utils/db/conn-db-handler";
|
||||
|
||||
type Param = {
|
||||
queryString: string;
|
||||
@@ -28,22 +24,18 @@ export default async function varReadOnlyDatabaseDbHandler({
|
||||
*/
|
||||
let results;
|
||||
|
||||
const DB_CONN = global.DSQL_READ_ONLY_DB_CONN || global.DSQL_DB_CONN;
|
||||
|
||||
/**
|
||||
* Fetch from db
|
||||
*
|
||||
* @description Fetch data from db if no cache
|
||||
*/
|
||||
try {
|
||||
results = global.DSQL_USE_LOCAL
|
||||
? await LOCAL_DB_HANDLER(queryString, queryValuesArray)
|
||||
: await DSQL_USER_DB_HANDLER({
|
||||
paradigm: "Read Only",
|
||||
queryString,
|
||||
queryValues: queryValuesArray,
|
||||
});
|
||||
results = await connDbHandler(DB_CONN, queryString, queryValuesArray);
|
||||
|
||||
////////////////////////////////////////
|
||||
} catch (/** @type {any} */ error: any) {
|
||||
} catch (error: any) {
|
||||
////////////////////////////////////////
|
||||
|
||||
serverError({
|
||||
@@ -56,6 +48,8 @@ export default async function varReadOnlyDatabaseDbHandler({
|
||||
* Return error
|
||||
*/
|
||||
return error.message;
|
||||
} finally {
|
||||
DB_CONN?.end();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1446,3 +1446,11 @@ export type HttpFunctionResponse<
|
||||
str?: string;
|
||||
requestedPath?: string;
|
||||
};
|
||||
|
||||
export type ApiGetQueryObject<
|
||||
T extends { [k: string]: any } = { [k: string]: any }
|
||||
> = {
|
||||
query: ServerQueryParam<T>;
|
||||
table: string;
|
||||
dbFullName?: string;
|
||||
};
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
type Param = {
|
||||
dbContext?: "Master" | "Dsql User";
|
||||
dbFullName?: string;
|
||||
};
|
||||
|
||||
export default function checkIfIsMaster({ dbContext, dbFullName }: Param) {
|
||||
return dbContext?.match(/dsql.user/i)
|
||||
? false
|
||||
: global.DSQL_USE_LOCAL
|
||||
? true
|
||||
: dbFullName && !dbFullName.match(/^datasquirel$/)
|
||||
? false
|
||||
: true;
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
import sqlGenerator from "../functions/dsql/sql/sql-generator";
|
||||
import { ApiGetQueryObject } from "../types";
|
||||
|
||||
type Param = {
|
||||
query: string | ApiGetQueryObject;
|
||||
values?: (string | number)[];
|
||||
};
|
||||
export default function apiGetGrabQueryAndValues({ query, values }: Param) {
|
||||
const queryGenObject =
|
||||
typeof query == "string"
|
||||
? undefined
|
||||
: sqlGenerator({
|
||||
tableName: query.table,
|
||||
genObject: query.query,
|
||||
dbFullName: query.dbFullName || "__db",
|
||||
});
|
||||
|
||||
return {
|
||||
query:
|
||||
typeof query == "string"
|
||||
? String(
|
||||
query.replace(/\n|\r|\n\r/g, "").replace(/ {2,}/g, " ")
|
||||
)
|
||||
: queryGenObject?.string || "",
|
||||
values: values || queryGenObject?.values,
|
||||
valuesString:
|
||||
typeof query == "string"
|
||||
? values
|
||||
? JSON.stringify(values)
|
||||
: undefined
|
||||
: queryGenObject?.values
|
||||
? JSON.stringify(queryGenObject.values)
|
||||
: undefined,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user