This commit is contained in:
Benjamin Toby
2025-01-28 19:43:16 +01:00
parent 81cf010cb5
commit 35fec57590
856 changed files with 5362 additions and 2266 deletions
@@ -2,29 +2,44 @@
import _ from "lodash";
import serverError from "../../backend/serverError";
import runQuery from "../../backend/db/runQuery";
import { DSQL_TableSchemaType, GetReturn } from "../../../types";
import runQuery, { DbContextsArray } from "../../backend/db/runQuery";
import {
ApiGetQueryObject,
DSQL_TableSchemaType,
GetReturn,
ServerQueryParam,
} from "../../../types";
import apiGetGrabQueryAndValues from "../../../utils/grab-query-and-values";
type Param = {
query: string;
type Param<T extends { [key: string]: any } = { [key: string]: any }> = {
query: string | ApiGetQueryObject<T>;
queryValues?: (string | number)[];
dbFullName: string;
tableName?: string;
dbSchema?: import("../../../types").DSQL_DatabaseSchemaType;
useLocal?: boolean;
debug?: boolean;
dbContext?: (typeof DbContextsArray)[number];
};
/**
* # Get Function FOr API
*/
export default async function apiGet({
export default async function apiGet<
T extends { [key: string]: any } = { [key: string]: any }
>({
query,
dbFullName,
queryValues,
tableName,
dbSchema,
useLocal,
}: Param): Promise<import("../../../types").GetReturn> {
debug,
dbContext,
}: Param<T>): Promise<import("../../../types").GetReturn> {
const queryAndValues = apiGetGrabQueryAndValues({
query,
values: queryValues,
});
if (
typeof query == "string" &&
query.match(/^alter|^delete|information_schema|databases|^create/i)
@@ -37,14 +52,20 @@ export default async function apiGet({
try {
let { result, error } = await runQuery({
dbFullName: dbFullName,
query: query,
queryValuesArray: queryValues,
query: queryAndValues.query,
queryValuesArray: queryAndValues.values,
readOnly: true,
dbSchema,
tableName,
local: useLocal,
dbContext,
debug,
});
if (debug && global.DSQL_USE_LOCAL) {
console.log("apiGet:result", result);
console.log("apiGet:error", error);
}
let tableSchema: DSQL_TableSchemaType | undefined;
if (dbSchema) {
@@ -83,6 +104,10 @@ export default async function apiGet({
message: error.message,
});
if (debug && global.DSQL_USE_LOCAL) {
console.log("apiGet:error", error.message);
}
return {
success: false,
payload: null,
@@ -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,7 +9,7 @@ type Param = {
dbFullName: string;
tableName?: string;
dbSchema?: DSQL_DatabaseSchemaType;
useLocal?: boolean;
dbContext?: (typeof DbContextsArray)[number];
};
/**
@@ -21,7 +21,7 @@ export default async function apiPost({
queryValues,
tableName,
dbSchema,
useLocal,
dbContext,
}: Param): Promise<PostReturn> {
if (typeof query === "string" && query?.match(/^create |^alter |^drop /i)) {
return { success: false, msg: "Wrong Input" };
@@ -34,7 +34,6 @@ export default async function apiPost({
return { success: false, msg: "Wrong Input" };
}
/** @type {any} */
let results: any;
/**
@@ -49,14 +48,13 @@ export default async function apiPost({
dbSchema: dbSchema,
queryValuesArray: queryValues,
tableName,
local: useLocal,
dbContext,
});
results = result;
if (error) throw error;
/** @type {import("../../../types").DSQL_TableSchemaType | undefined} */
let tableSchema:
| import("../../../types").DSQL_TableSchemaType
| undefined;
View File
View File
View File
+61 -27
View File
@@ -1,4 +1,4 @@
import fs from "fs";
import fs, { glob } from "fs";
import handleNodemailer from "../../backend/handleNodemailer";
import path from "path";
import addMariadbUser from "../../backend/addMariadbUser";
@@ -23,30 +23,55 @@ export default async function handleSocialDb({
invitation,
supEmail,
additionalFields,
useLocal,
debug,
}: HandleSocialDbFunctionParams): Promise<APILoginFunctionReturn> {
try {
const existingSocialIdUserQuery = `SELECT * FROM datasquirel.users WHERE social_id = ? AND social_login='1' AND social_platform = ? `;
const finalDbName = global.DSQL_USE_LOCAL
? undefined
: database
? database
: "datasquirel";
const dbAppend = global.DSQL_USE_LOCAL ? "" : `${finalDbName}.`;
const existingSocialIdUserQuery = `SELECT * FROM ${dbAppend}users WHERE social_id = ? AND social_login='1' AND social_platform = ? `;
const existingSocialIdUserValues = [
social_id.toString(),
social_platform,
];
if (debug) {
console.log(
"handleSocialDb:existingSocialIdUserQuery",
existingSocialIdUserQuery
);
console.log(
"handleSocialDb:existingSocialIdUserValues",
existingSocialIdUserValues
);
}
let existingSocialIdUser = await varDatabaseDbHandler({
database: database ? database : "datasquirel",
database: finalDbName,
queryString: existingSocialIdUserQuery,
queryValuesArray: existingSocialIdUserValues,
useLocal,
debug,
});
if (existingSocialIdUser && existingSocialIdUser[0]) {
if (debug) {
console.log(
"handleSocialDb:existingSocialIdUser",
existingSocialIdUser
);
}
if (existingSocialIdUser?.[0]) {
return await loginSocialUser({
user: existingSocialIdUser[0],
social_platform,
invitation,
database,
database: finalDbName,
additionalFields,
useLocal,
debug,
});
}
@@ -60,14 +85,25 @@ export default async function handleSocialDb({
};
}
const existingEmailOnlyQuery = `SELECT * FROM datasquirel.users WHERE email='${finalEmail}'`;
const existingEmailOnlyQuery = `SELECT * FROM ${dbAppend}users WHERE email='${finalEmail}'`;
if (debug) {
console.log(
"handleSocialDb:existingEmailOnlyQuery",
existingEmailOnlyQuery
);
}
let existingEmailOnly = await varDatabaseDbHandler({
database: database ? database : "datasquirel",
database: finalDbName,
queryString: existingEmailOnlyQuery,
useLocal,
debug,
});
if (debug) {
console.log("handleSocialDb:existingEmailOnly", existingEmailOnly);
}
if (existingEmailOnly && existingEmailOnly[0]) {
return {
success: false,
@@ -76,14 +112,14 @@ export default async function handleSocialDb({
};
}
const foundUserQuery = `SELECT * FROM datasquirel.users WHERE email=? AND social_login='1' AND social_platform=? AND social_id=?`;
const foundUserQuery = `SELECT * FROM ${dbAppend}users WHERE email=? AND social_login='1' AND social_platform=? AND social_id=?`;
const foundUserQueryValues = [finalEmail, social_platform, social_id];
const foundUser = await varDatabaseDbHandler({
database: database ? database : "datasquirel",
database: finalDbName,
queryString: foundUserQuery,
queryValuesArray: foundUserQueryValues,
useLocal,
debug,
});
if (foundUser && foundUser[0]) {
@@ -91,9 +127,9 @@ export default async function handleSocialDb({
user: payload,
social_platform,
invitation,
database,
database: finalDbName,
additionalFields,
useLocal,
debug,
});
}
@@ -111,11 +147,10 @@ export default async function handleSocialDb({
data[key] = payload[key];
});
/** @type {any} */
const newUser = await addDbEntry({
dbContext: database ? "Dsql User" : undefined,
paradigm: database ? "Full Access" : undefined,
dbFullName: database ? database : "datasquirel",
dbContext: finalDbName ? "Dsql User" : undefined,
paradigm: finalDbName ? "Full Access" : undefined,
dbFullName: finalDbName,
tableName: "users",
duplicateColumnName: "email",
duplicateColumnValue: finalEmail,
@@ -123,7 +158,6 @@ export default async function handleSocialDb({
...data,
email: finalEmail,
},
useLocal,
});
if (newUser?.insertId) {
@@ -131,15 +165,15 @@ export default async function handleSocialDb({
/**
* Add a Mariadb User for this User
*/
await addMariadbUser({ userId: newUser.insertId, useLocal });
await addMariadbUser({ userId: newUser.insertId });
}
const newUserQueriedQuery = `SELECT * FROM datasquirel.users WHERE id='${newUser.insertId}'`;
const newUserQueriedQuery = `SELECT * FROM ${dbAppend}users WHERE id='${newUser.insertId}'`;
const newUserQueried = await varDatabaseDbHandler({
database: database ? database : "datasquirel",
database: finalDbName,
queryString: newUserQueriedQuery,
useLocal,
debug,
});
if (!newUserQueried || !newUserQueried[0])
@@ -215,9 +249,9 @@ export default async function handleSocialDb({
user: newUserQueried[0],
social_platform,
invitation,
database,
database: finalDbName,
additionalFields,
useLocal,
debug,
});
} else {
console.log(
+11 -10
View File
@@ -1,6 +1,9 @@
import addAdminUserOnLogin from "../../backend/addAdminUserOnLogin";
import varDatabaseDbHandler from "../../backend/varDatabaseDbHandler";
import { APILoginFunctionReturn } from "../../../types";
import {
APILoginFunctionReturn,
DATASQUIREL_LoggedInUser,
} from "../../../types";
type Param = {
user: {
@@ -13,7 +16,7 @@ type Param = {
invitation?: any;
database?: string;
additionalFields?: string[];
useLocal?: boolean;
debug?: boolean;
};
/**
@@ -28,18 +31,19 @@ export default async function loginSocialUser({
invitation,
database,
additionalFields,
useLocal,
debug,
}: Param): Promise<APILoginFunctionReturn> {
const finalDbName = database ? database : "datasquirel";
const dbAppend = database ? `\`${finalDbName}\`.` : "";
const foundUserQuery = `SELECT * FROM \`${finalDbName}\`.\`users\` WHERE email=? AND social_id=? AND social_platform=?`;
const foundUserQuery = `SELECT * FROM ${dbAppend}\`users\` WHERE email=? AND social_id=? AND social_platform=?`;
const foundUserValues = [user.email, user.social_id, social_platform];
const foundUser = await varDatabaseDbHandler({
database: finalDbName,
queryString: foundUserQuery,
queryValuesArray: foundUserValues,
useLocal,
debug,
});
if (!foundUser?.[0])
@@ -53,8 +57,7 @@ export default async function loginSocialUser({
"-" +
Math.random().toString(36).substring(2);
/** @type {import("../../../types").DATASQUIREL_LoggedInUser} */
let userPayload: import("../../../types").DATASQUIREL_LoggedInUser = {
let userPayload: DATASQUIREL_LoggedInUser = {
id: foundUser[0].id,
first_name: foundUser[0].first_name,
last_name: foundUser[0].last_name,
@@ -82,12 +85,10 @@ export default async function loginSocialUser({
addAdminUserOnLogin({
query: invitation,
user: userPayload,
useLocal,
});
}
/** @type {import("../../../types").APILoginFunctionReturn} */
let result: import("../../../types").APILoginFunctionReturn = {
let result: APILoginFunctionReturn = {
success: true,
payload: userPayload,
csrf: csrfKey,
@@ -15,7 +15,6 @@ export default async function apiCreateUser({
payload,
database,
userId,
useLocal,
}: APICreateUserFunctionParams) {
const dbFullName = database;
const API_USER_ID = userId || process.env.DSQL_API_USER_ID;
@@ -51,21 +50,19 @@ export default async function apiCreateUser({
let fields = await varDatabaseDbHandler({
queryString: fieldsQuery,
database: dbFullName,
useLocal,
});
if (!fields?.[0]) {
const newTable = await addUsersTableToDb({
userId: Number(API_USER_ID),
database: dbFullName,
useLocal,
payload: payload,
});
fields = await varDatabaseDbHandler({
queryString: fieldsQuery,
database: dbFullName,
useLocal,
});
}
@@ -111,7 +108,6 @@ export default async function apiCreateUser({
queryString: existingUserQuery,
queryValuesArray: existingUserValues,
database: dbFullName,
useLocal,
});
if (existingUser?.[0]) {
@@ -136,7 +132,6 @@ export default async function apiCreateUser({
process.env.DSQL_DEFAULT_USER_IMAGE ||
"/images/user-preset-thumbnail.png",
},
useLocal,
});
if (addUser?.insertId) {
@@ -145,7 +140,6 @@ export default async function apiCreateUser({
const newlyAddedUser = await varDatabaseDbHandler({
queryString: newlyAddedUserQuery,
database: dbFullName,
useLocal,
});
return {
@@ -4,7 +4,6 @@ import varDatabaseDbHandler from "../../backend/varDatabaseDbHandler";
type Param = {
dbFullName: string;
deletedUserId: string | number;
useLocal?: boolean;
};
type Return = { success: boolean; result?: any; msg?: string };
@@ -14,7 +13,6 @@ type Return = { success: boolean; result?: any; msg?: string };
export default async function apiDeleteUser({
dbFullName,
deletedUserId,
useLocal,
}: Param): Promise<Return> {
const existingUserQuery = `SELECT * FROM ${dbFullName}.users WHERE id = ?`;
const existingUserValues = [deletedUserId];
@@ -23,7 +21,6 @@ export default async function apiDeleteUser({
queryString: existingUserQuery,
queryValuesArray: existingUserValues,
database: dbFullName,
useLocal,
});
if (!existingUser?.[0]) {
@@ -35,12 +32,10 @@ export default async function apiDeleteUser({
const deleteUser = await deleteDbEntry({
dbContext: "Dsql User",
paradigm: "Full Access",
dbFullName,
tableName: "users",
identifierColumnName: "id",
identifierValue: deletedUserId,
useLocal,
});
return {
@@ -11,7 +11,6 @@ export default async function apiGetUser({
fields,
dbFullName,
userId,
useLocal,
}: APIGetUserFunctionParams): Promise<GetUserFunctionReturn> {
const finalDbName = dbFullName.replace(/[^a-z0-9_]/g, "");
@@ -24,7 +23,6 @@ export default async function apiGetUser({
queryString: query,
queryValuesArray: [API_USER_ID],
database: finalDbName,
useLocal,
});
if (!foundUser || !foundUser[0]) {
@@ -20,14 +20,13 @@ export default async function apiLoginUser({
email_login,
email_login_code,
email_login_field,
token,
skipPassword,
social,
useLocal,
dbUserId,
debug,
}: APILoginFunctionParams): Promise<APILoginFunctionReturn> {
const dbFullName = grabDbFullName({ dbName: database, userId: dbUserId });
const dbAppend = global.DSQL_USE_LOCAL ? "" : `${dbFullName}.`;
/**
* Check input validity
@@ -63,10 +62,10 @@ export default async function apiLoginUser({
}
let foundUser = await varDatabaseDbHandler({
queryString: `SELECT * FROM ${dbFullName}.users WHERE email = ? OR username = ?`,
queryString: `SELECT * FROM ${dbAppend}users WHERE email = ? OR username = ?`,
queryValuesArray: [email, username],
database: dbFullName,
useLocal,
debug,
});
@@ -140,10 +139,9 @@ export default async function apiLoginUser({
if (isPasswordCorrect && email_login) {
const resetTempCode = await varDatabaseDbHandler({
queryString: `UPDATE ${dbFullName}.users SET ${email_login_field} = '' WHERE email = ? OR username = ?`,
queryString: `UPDATE ${dbAppend}users SET ${email_login_field} = '' WHERE email = ? OR username = ?`,
queryValuesArray: [email, username],
database: dbFullName,
useLocal,
});
}
@@ -5,7 +5,6 @@ type Param = {
existingUser: { [s: string]: any };
database?: string;
additionalFields?: string[];
useLocal?: boolean;
};
/**
@@ -15,15 +14,19 @@ export default async function apiReauthUser({
existingUser,
database,
additionalFields,
useLocal,
}: Param): Promise<APILoginFunctionReturn> {
const dbAppend = global.DSQL_USE_LOCAL
? ""
: database
? `${database}.`
: "";
let foundUser =
existingUser?.id && existingUser.id.toString().match(/./)
? await varDatabaseDbHandler({
queryString: `SELECT * FROM ${database}.users WHERE id=?`,
queryString: `SELECT * FROM ${dbAppend}users WHERE id=?`,
queryValuesArray: [existingUser.id.toString()],
database,
useLocal,
})
: null;
@@ -39,7 +42,6 @@ export default async function apiReauthUser({
"-" +
Math.random().toString(36).substring(2);
/** @type {import("../../../types").DATASQUIREL_LoggedInUser} */
let userPayload: import("../../../types").DATASQUIREL_LoggedInUser = {
id: foundUser[0].id,
first_name: foundUser[0].first_name,
@@ -16,7 +16,6 @@ type Param = {
mail_username?: string;
mail_password?: string;
html: string;
useLocal?: boolean;
response?: http.ServerResponse & { [s: string]: any };
extraCookies?: import("../../../../package-shared/types").CookieObject[];
};
@@ -34,7 +33,6 @@ export default async function apiSendEmailCode({
mail_username,
mail_password,
html,
useLocal,
response,
extraCookies,
}: Param): Promise<SendOneTimeCodeEmailResponse> {
@@ -53,7 +51,6 @@ export default async function apiSendEmailCode({
queryString: foundUserQuery,
queryValuesArray: foundUserValues,
database,
useLocal,
});
////////////////////////////////////////
@@ -114,7 +111,6 @@ export default async function apiSendEmailCode({
queryString: setTempCodeQuery,
queryValuesArray: setTempCodeValues,
database,
useLocal,
});
/** @type {import("../../../types").SendOneTimeCodeEmailResponse} */
@@ -9,7 +9,6 @@ type Param = {
payload: { [s: string]: any };
dbFullName: string;
updatedUserId: string | number;
useLocal?: boolean;
dbSchema?: import("../../../types").DSQL_DatabaseSchemaType;
};
@@ -22,7 +21,7 @@ export default async function apiUpdateUser({
payload,
dbFullName,
updatedUserId,
useLocal,
dbSchema,
}: Param): Promise<Return> {
const existingUserQuery = `SELECT * FROM ${dbFullName}.users WHERE id = ?`;
@@ -32,7 +31,6 @@ export default async function apiUpdateUser({
queryString: existingUserQuery,
queryValuesArray: existingUserValues,
database: dbFullName,
useLocal,
});
if (!existingUser?.[0]) {
@@ -83,13 +81,11 @@ export default async function apiUpdateUser({
const updateUser = await updateDbEntry({
dbContext: "Dsql User",
paradigm: "Full Access",
dbFullName,
tableName: "users",
identifierColumnName: "id",
identifierValue: updatedUserId,
data: data,
useLocal,
});
return {
@@ -14,7 +14,6 @@ type Param = {
email: string;
encryptionKey?: string;
encryptionSalt?: string;
useLocal?: boolean;
debug?: boolean;
apiUserID?: string | number;
dbUserId?: string | number;
@@ -26,13 +25,8 @@ type Param = {
export default async function apiSendResetPasswordLink({
database,
email,
apiUserID,
dbUserId,
debug,
encryptionKey,
encryptionSalt,
key,
useLocal,
}: Param): Promise<Return> {
const dbFullName = grabDbFullName({ dbName: database, userId: dbUserId });
@@ -52,7 +46,6 @@ export default async function apiSendResetPasswordLink({
queryString: `SELECT * FROM ${dbFullName}.users WHERE email = ? OR username = ?`,
queryValuesArray: [email, email],
database: dbFullName,
useLocal,
debug,
});
@@ -15,6 +15,7 @@ export default async function apiGoogleLogin({
database,
additionalFields,
additionalData,
debug,
}: APIGoogleLoginFunctionParams): Promise<APILoginFunctionReturn> {
try {
const gUser: GoogleOauth2User | undefined = await new Promise(
@@ -45,18 +46,6 @@ export default async function apiGoogleLogin({
if (!gUser?.email_verified) throw new Error("No Google User.");
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
if (!database || typeof database != "string" || database?.match(/ /)) {
return {
success: false,
payload: undefined,
msg: "Please provide a database slug(database name in lowercase with no spaces)",
};
}
/**
* Create new user folder and file
*
@@ -65,7 +54,6 @@ export default async function apiGoogleLogin({
const { given_name, family_name, email, sub, picture } = gUser;
/** @type {Object<string, any>} */
let payloadObject: { [s: string]: any } = {
email: email,
first_name: given_name,
@@ -88,6 +76,7 @@ export default async function apiGoogleLogin({
social_platform: "google",
social_id: sub,
additionalFields,
debug,
});
////////////////////////////////////////
+3 -5
View File
@@ -11,7 +11,6 @@ type Param = {
priviledge: string;
email: string;
};
useLocal?: boolean;
user: DATASQUIREL_LoggedInUser;
};
@@ -26,10 +25,11 @@ type Param = {
export default async function addAdminUserOnLogin({
query,
user,
useLocal,
}: Param): Promise<any> {
try {
const finalDbHandler = useLocal ? LOCAL_DB_HANDLER : DB_HANDLER;
const finalDbHandler = global.DSQL_USE_LOCAL
? LOCAL_DB_HANDLER
: DB_HANDLER;
const { invite, database_access, priviledge, email } = query;
const lastInviteTimeQuery = `SELECT date_created_code FROM invitations WHERE inviting_user_id=? AND invited_user_email=?`;
@@ -82,7 +82,6 @@ export default async function addAdminUserOnLogin({
image: user.image,
image_thumbnail: user.image_thumbnail,
},
useLocal,
});
////////////////////////////////////////////////
@@ -122,7 +121,6 @@ export default async function addAdminUserOnLogin({
table: table_slug,
priviledge: priviledge,
},
useLocal,
});
}
}
@@ -7,16 +7,12 @@ import LOCAL_DB_HANDLER from "../../utils/backend/global-db/LOCAL_DB_HANDLER";
type Param = {
userId: number | string;
useLocal?: boolean;
};
/**
* # Add Mariadb User
*/
export default async function addMariadbUser({
userId,
useLocal,
}: Param): Promise<any> {
export default async function addMariadbUser({ userId }: Param): Promise<any> {
try {
const defaultMariadbUserHost = process.env.DSQL_DB_HOST || "127.0.0.1";
@@ -32,7 +28,7 @@ export default async function addMariadbUser({
const createMariadbUsersQuery = `CREATE USER IF NOT EXISTS '${username}'@'127.0.0.1' IDENTIFIED BY '${password}'`;
if (useLocal) {
if (global.DSQL_USE_LOCAL) {
await LOCAL_DB_HANDLER(createMariadbUsersQuery);
} else {
await NO_DB_HANDLER(createMariadbUsersQuery);
@@ -41,7 +37,7 @@ export default async function addMariadbUser({
const updateUserQuery = `UPDATE users SET mariadb_user = ?, mariadb_host = '127.0.0.1', mariadb_pass = ? WHERE id = ?`;
const updateUserValues = [username, encryptedPassword, userId];
const updateUser = useLocal
const updateUser = global.DSQL_USE_LOCAL
? await LOCAL_DB_HANDLER(updateUserQuery, updateUserValues)
: await DB_HANDLER(updateUserQuery, updateUserValues);
@@ -56,7 +52,6 @@ export default async function addMariadbUser({
grants: '[{"database":"*","table":"*","privileges":["ALL"]}]',
},
dbContext: "Master",
useLocal,
});
console.log(`User ${userId} SQL credentials successfully added.`);
+1 -5
View File
@@ -10,7 +10,6 @@ import grabNewUsersTableSchema from "./grabNewUsersTableSchema";
type Param = {
userId: number;
database: string;
useLocal?: boolean;
payload?: { [s: string]: any };
};
@@ -20,7 +19,6 @@ type Param = {
export default async function addUsersTableToDb({
userId,
database,
useLocal,
payload,
}: Param): Promise<any> {
try {
@@ -52,8 +50,7 @@ export default async function addUsersTableToDb({
setUserSchemaData({ schemaData: userSchemaData, userId });
/** @type {any[] | null} */
const targetDb: any[] | null = useLocal
const targetDb: any[] | null = global.DSQL_USE_LOCAL
? await LOCAL_DB_HANDLER(
`SELECT id FROM user_databases WHERE user_id=? AND db_slug=?`,
[userId, database]
@@ -74,7 +71,6 @@ export default async function addUsersTableToDb({
table_name: "Users",
table_slug: "users",
},
useLocal,
});
}
@@ -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;
@@ -21,32 +19,10 @@ type Param = {
update?: boolean;
encryptionKey?: string;
encryptionSalt?: string;
useLocal?: boolean;
};
/**
* Add a db Entry Function
* ==============================================================================
* @description Description
* @async
*
* @param {object} params - An object containing the function parameters.
* @param {("Master" | "Dsql User")} [params.dbContext] - What is the database context? "Master"
* or "Dsql User". Defaults to "Master"
* @param {("Read Only" | "Full Access")} [params.paradigm] - What is the paradigm for "Dsql User"?
* "Read only" or "Full Access"? Defaults to "Read Only"
* @param {string} [params.dbFullName] - Database full name
* @param {string} params.tableName - Table name
* @param {any} params.data - Data to add
* @param {import("../../../types").DSQL_TableSchemaType} [params.tableSchema] - Table schema
* @param {string} [params.duplicateColumnName] - Duplicate column name
* @param {string} [params.duplicateColumnValue] - Duplicate column value
* @param {boolean} [params.update] - Update this row if it exists
* @param {string} [params.encryptionKey] - Update this row if it exists
* @param {string} [params.encryptionSalt] - Update this row if it exists
* @param {boolean} [params.useLocal]
*
* @returns {Promise<any>}
*/
export default async function addDbEntry({
dbContext,
@@ -60,25 +36,18 @@ export default async function addDbEntry({
update,
encryptionKey,
encryptionSalt,
useLocal,
}: Param): Promise<any> {
/**
* Initialize variables
*/
const isMaster = useLocal
? true
: dbContext?.match(/dsql.user/i)
? false
: dbFullName && !dbFullName.match(/^datasquirel$/)
? false
: true;
const isMaster = checkIfIsMaster({ dbContext, dbFullName });
/** @type { any } */
const dbHandler: any = useLocal
? 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;
////////////////////////////////////////
////////////////////////////////////////
@@ -95,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,
@@ -201,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;
}
@@ -233,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,16 +1,14 @@
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;
identifierColumnName: string;
identifierValue: string | number;
useLocal?: boolean;
};
/**
@@ -19,43 +17,33 @@ type Param = {
*/
export default async function deleteDbEntry({
dbContext,
paradigm,
dbFullName,
tableName,
identifierColumnName,
identifierValue,
useLocal,
}: Param): Promise<object | null> {
try {
const isMaster = useLocal
? 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 = useLocal
? 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,11 +7,14 @@ 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;
local?: boolean;
debug?: boolean;
dbSchema?: import("../../../types").DSQL_DatabaseSchemaType;
queryValuesArray?: (string | number)[];
tableName?: string;
@@ -27,7 +30,8 @@ export default async function runQuery({
dbSchema,
queryValuesArray,
tableName,
local,
debug,
dbContext,
}: Param): Promise<any> {
/**
* Declare variables
@@ -66,6 +70,10 @@ export default async function runQuery({
if (typeof query === "string") {
const formattedQuery = trimSql(query);
if (debug && global.DSQL_USE_LOCAL) {
console.log("runQuery:formattedQuery", formattedQuery);
}
/**
* Input Validation
*
@@ -85,14 +93,12 @@ export default async function runQuery({
queryString: formattedQuery,
queryValuesArray: queryValuesArray?.map((vl) => String(vl)),
tableSchema,
useLocal: local,
});
} else {
result = await fullAccessDbHandler({
queryString: formattedQuery,
queryValuesArray: queryValuesArray?.map((vl) => String(vl)),
tableSchema,
local,
});
}
} else if (typeof query === "object") {
@@ -115,8 +121,7 @@ export default async function runQuery({
switch (action.toLowerCase()) {
case "insert":
result = await addDbEntry({
dbContext: local ? "Master" : "Dsql User",
paradigm: "Full Access",
dbContext,
dbFullName: dbFullName,
tableName: table,
data: data,
@@ -124,7 +129,6 @@ export default async function runQuery({
duplicateColumnName,
duplicateColumnValue,
tableSchema,
useLocal: local,
});
if (!result?.insertId) {
@@ -135,29 +139,25 @@ export default async function runQuery({
case "update":
result = await updateDbEntry({
dbContext: local ? "Master" : "Dsql User",
paradigm: "Full Access",
dbContext,
dbFullName: dbFullName,
tableName: table,
data: data,
identifierColumnName,
identifierValue,
tableSchema,
useLocal: local,
});
break;
case "delete":
result = await deleteDbEntry({
dbContext: local ? "Master" : "Dsql User",
paradigm: "Full Access",
dbContext,
dbFullName: dbFullName,
tableName: table,
identifierColumnName,
identifierValue,
tableSchema,
useLocal: local,
});
break;
@@ -167,11 +167,16 @@ export default async function runQuery({
break;
}
}
} catch (/** @type {any} */ error: any) {
} catch (error: any) {
serverError({
component: "functions/backend/runQuery",
message: error.message,
});
if (debug && global.DSQL_USE_LOCAL) {
console.log("runQuery:error", error.message);
}
result = null;
error = error.message;
}
@@ -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;
@@ -16,7 +15,6 @@ type Param = {
tableSchema?: import("../../../types").DSQL_TableSchemaType;
identifierColumnName: string;
identifierValue: string | number;
useLocal?: boolean;
};
/**
@@ -25,7 +23,6 @@ type Param = {
*/
export default async function updateDbEntry({
dbContext,
paradigm,
dbFullName,
tableName,
data,
@@ -34,27 +31,20 @@ export default async function updateDbEntry({
identifierValue,
encryptionKey,
encryptionSalt,
useLocal,
}: Param): Promise<object | null> {
/**
* Check if data is valid
*/
if (!data || !Object.keys(data).length) return null;
const isMaster = useLocal
? 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 = useLocal
? 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;
////////////////////////////////////////
////////////////////////////////////////
@@ -164,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,7 @@
import fs from "fs";
import serverError from "./serverError";
import mysql from "serverless-mysql";
import grabDSQLConnection from "../../utils/grab-dsql-connection";
import path from "path";
/**
* # Main DB Handler Function
@@ -37,8 +37,12 @@ export default async function dbHandler(...args: any[]) {
);
});
} catch (error: any) {
const tmpFolder = path.resolve(process.cwd(), "./.tmp");
if (!fs.existsSync(tmpFolder))
fs.mkdirSync(tmpFolder, { recursive: true });
fs.appendFileSync(
"./.tmp/dbErrorLogs.txt",
path.resolve(tmpFolder, "./dbErrorLogs.txt"),
JSON.stringify(error, null, 4) + "\n" + Date() + "\n\n\n",
"utf8"
);
@@ -1,13 +1,9 @@
// @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";
type Param = {
queryString: string;
local?: boolean;
tableSchema?: import("../../types").DSQL_TableSchemaType | null;
queryValuesArray?: string[];
};
@@ -19,7 +15,6 @@ export default async function fullAccessDbHandler({
queryString,
tableSchema,
queryValuesArray,
local,
}: Param) {
/**
* Declare variables
@@ -28,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 = 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({
@@ -57,6 +46,8 @@ export default async function fullAccessDbHandler({
* Return error
*/
return error.message;
} finally {
DB_CONN?.end();
}
/**
View File
View File
View File
View File
@@ -37,18 +37,23 @@ export default function httpRequest<
delete params.query;
delete params.urlEncodedFormBody;
let finalHeaders: http.OutgoingHttpHeaders = {
"Content-Type": isUrlEncodedFormBody
? "application/x-www-form-urlencoded"
: "application/json",
};
if (reqPayloadString) {
finalHeaders["Content-Length"] =
Buffer.from(reqPayloadString).length;
}
finalHeaders = { ...finalHeaders, ...params.headers };
/** @type {import("node:https").RequestOptions} */
const requestOptions: import("node:https").RequestOptions = {
...params,
headers: {
"Content-Type": isUrlEncodedFormBody
? "application/x-www-form-urlencoded"
: "application/json",
"Content-Length": reqPayloadString
? Buffer.from(reqPayloadString).length
: undefined,
...params.headers,
},
headers: finalHeaders,
port: paramScheme == "https" ? 443 : params.port,
path: finalPath,
};
View File
View File
View File
@@ -8,7 +8,6 @@ type Param = {
queryValuesArray?: any[];
database?: string;
tableSchema?: import("../../types").DSQL_TableSchemaType;
useLocal?: boolean;
debug?: boolean;
};
@@ -20,16 +19,16 @@ export default async function varDatabaseDbHandler({
queryValuesArray,
database,
tableSchema,
useLocal,
debug,
}: Param): Promise<any> {
let CONNECTION = grabDSQLConnection({ fa: true });
if (useLocal) CONNECTION = grabDSQLConnection({ local: true });
if (global.DSQL_USE_LOCAL) CONNECTION = grabDSQLConnection({ local: true });
if (database?.match(/^datasquirel$/)) CONNECTION = grabDSQLConnection();
if (debug) {
console.log(`varDatabaseDbHandler:query:`, queryString);
console.log(`varDatabaseDbHandler:values:`, queryValuesArray);
console.log(`varDatabaseDbHandler:CONNECTION:`, CONNECTION.getConfig());
}
let results = await connDbHandler(
@@ -1,16 +1,11 @@
// @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;
queryValuesArray?: string[];
tableSchema?: import("../../types").DSQL_TableSchemaType;
useLocal?: boolean;
};
/**
@@ -21,7 +16,6 @@ export default async function varReadOnlyDatabaseDbHandler({
queryString,
queryValuesArray,
tableSchema,
useLocal,
}: Param) {
/**
* Declare variables
@@ -30,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 = useLocal
? 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({
@@ -58,6 +48,8 @@ export default async function varReadOnlyDatabaseDbHandler({
* Return error
*/
return error.message;
} finally {
DB_CONN?.end();
}
/**
@@ -9,12 +9,16 @@ interface SQLDeleteGenReturn {
export default function sqlDeleteGenerator({
tableName,
data,
dbFullName,
}: {
data: any;
tableName: string;
dbFullName?: string;
}): SQLDeleteGenReturn | undefined {
const finalDbName = dbFullName ? `${dbFullName}.` : "";
try {
let queryStr = `DELETE FROM ${tableName}`;
let queryStr = `DELETE FROM ${finalDbName}${tableName}`;
let deleteBatch: string[] = [];
let queryArr: string[] = [];
@@ -4,9 +4,10 @@ import {
ServerQueryQueryObject,
} from "../../../types";
type Param = {
genObject?: ServerQueryParam;
type Param<T extends { [key: string]: any } = { [key: string]: any }> = {
genObject?: ServerQueryParam<T>;
tableName: string;
dbFullName?: string;
};
type Return =
@@ -20,7 +21,9 @@ type Return =
* # SQL Query Generator
* @description Generates an SQL Query for node module `mysql` or `serverless-mysql`
*/
export default function sqlGenerator({ tableName, genObject }: Param): Return {
export default function sqlGenerator<
T extends { [key: string]: any } = { [key: string]: any }
>({ tableName, genObject, dbFullName }: Param<T>): Return {
if (!genObject) return undefined;
const finalQuery = genObject.query ? genObject.query : undefined;
@@ -29,6 +32,8 @@ export default function sqlGenerator({ tableName, genObject }: Param): Return {
const sqlSearhValues: string[] = [];
const finalDbName = dbFullName ? `${dbFullName}.` : "";
/**
* # Generate Query
*/
@@ -43,10 +48,10 @@ export default function sqlGenerator({ tableName, genObject }: Param): Return {
}) {
const finalFieldName = (() => {
if (queryObj?.tableName) {
return `${queryObj.tableName}.${field}`;
return `${finalDbName}${queryObj.tableName}.${field}`;
}
if (join) {
return `${tableName}.${field}`;
return `${finalDbName}${tableName}.${field}`;
}
return field;
})();
@@ -112,7 +117,6 @@ export default function sqlGenerator({ tableName, genObject }: Param): Return {
join: genObject.join,
});
});
console.log("queryObj.operator", queryObj.operator);
return (
"(" +
@@ -128,7 +132,7 @@ export default function sqlGenerator({ tableName, genObject }: Param): Return {
/** @type {import("../../../types").ServerQueryParamsJoinMatchObject} */ mtch: import("../../../types").ServerQueryParamsJoinMatchObject,
/** @type {import("../../../types").ServerQueryParamsJoin} */ join: import("../../../types").ServerQueryParamsJoin
) {
return `${
return `${finalDbName}${
typeof mtch.source == "object" ? mtch.source.tableName : tableName
}.${
typeof mtch.source == "object" ? mtch.source.fieldName : mtch.source
@@ -138,7 +142,7 @@ export default function sqlGenerator({ tableName, genObject }: Param): Return {
}
if (join.alias) {
return `${
return `${finalDbName}${
typeof mtch.target == "object"
? mtch.target.tableName
: join.alias
@@ -149,7 +153,7 @@ export default function sqlGenerator({ tableName, genObject }: Param): Return {
}`;
}
return `${
return `${finalDbName}${
typeof mtch.target == "object"
? mtch.target.tableName
: join.tableName
@@ -166,14 +170,14 @@ export default function sqlGenerator({ tableName, genObject }: Param): Return {
if (genObject.selectFields?.[0]) {
if (genObject.join) {
str += ` ${genObject.selectFields
?.map((fld) => `${tableName}.${fld}`)
?.map((fld) => `${finalDbName}${tableName}.${fld}`)
.join(",")}`;
} else {
str += ` ${genObject.selectFields?.join(",")}`;
}
} else {
if (genObject.join) {
str += ` ${tableName}.*`;
str += ` ${finalDbName}${tableName}.*`;
} else {
str += " *";
}
@@ -199,11 +203,11 @@ export default function sqlGenerator({ tableName, genObject }: Param): Return {
return joinObj.selectFields
.map((selectField) => {
if (typeof selectField == "string") {
return `${joinTableName}.${selectField}`;
return `${finalDbName}${joinTableName}.${selectField}`;
} else if (typeof selectField == "object") {
let aliasSelectField = selectField.count
? `COUNT(${joinTableName}.${selectField.field})`
: `${joinTableName}.${selectField.field}`;
? `COUNT(${finalDbName}${joinTableName}.${selectField.field})`
: `${finalDbName}${joinTableName}.${selectField.field}`;
if (selectField.alias)
aliasSelectField += ` AS ${selectField.alias}`;
return aliasSelectField;
@@ -211,14 +215,14 @@ export default function sqlGenerator({ tableName, genObject }: Param): Return {
})
.join(",");
} else {
return `${joinTableName}.*`;
return `${finalDbName}${joinTableName}.*`;
}
})
.filter((_) => Boolean(_))
.join(",");
}
str += ` FROM ${tableName}`;
str += ` FROM ${finalDbName}${tableName}`;
if (genObject.join) {
str +=
@@ -229,8 +233,10 @@ export default function sqlGenerator({ tableName, genObject }: Param): Return {
join.joinType +
" " +
(join.alias
? join.tableName + " " + join.alias
: join.tableName) +
? `${finalDbName}${join.tableName}` +
" " +
join.alias
: `${finalDbName}${join.tableName}`) +
" ON " +
(() => {
if (Array.isArray(join.match)) {
@@ -267,8 +273,8 @@ export default function sqlGenerator({ tableName, genObject }: Param): Return {
if (genObject.order)
queryString += ` ORDER BY ${
genObject.join
? `${tableName}.${genObject.order.field}`
: genObject.order.field
? `${finalDbName}${tableName}.${String(genObject.order.field)}`
: String(genObject.order.field)
} ${genObject.order.strategy}`;
if (genObject.limit) queryString += ` LIMIT ${genObject.limit}`;
@@ -11,13 +11,16 @@ interface SQLInsertGenReturn {
export default function sqlInsertGenerator({
tableName,
data,
dbFullName,
}: {
data: any[];
tableName: string;
dbFullName?: string;
}): SQLInsertGenReturn | undefined {
const finalDbName = dbFullName ? `${dbFullName}.` : "";
try {
if (Array.isArray(data) && data?.[0]) {
/** @type {string[]} */
let insertKeys: string[] = [];
data.forEach((dt) => {
@@ -48,7 +51,7 @@ export default function sqlInsertGenerator({
.join(",")})`
);
});
let query = `INSERT INTO ${tableName} (${insertKeys.join(
let query = `INSERT INTO ${finalDbName}${tableName} (${insertKeys.join(
","
)}) VALUES ${queryBatches.join(",")}`;