Updates
This commit is contained in:
@@ -16,13 +16,12 @@ import grabDSQLConnection from "../utils/grab-dsql-connection";
|
||||
const CONNECTION = await grabDSQLConnection();
|
||||
|
||||
try {
|
||||
const result = await CONNECTION.query(
|
||||
const [result] = await CONNECTION.query(
|
||||
"SELECT id,first_name,last_name FROM users LIMIT 3"
|
||||
);
|
||||
console.log("Connection Query Success =>", result);
|
||||
} catch (error: any) {
|
||||
console.log("Connection query ERROR =>", error.message);
|
||||
global.ERROR_CALLBACK?.(`Error Checking DB`, error as Error);
|
||||
} finally {
|
||||
await CONNECTION?.end();
|
||||
process.exit();
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import varDatabaseDbHandler from "../utils/varDatabaseDbHandler";
|
||||
import { DSQL_DatabaseSchemaType, PostInsertReturn } from "../../types";
|
||||
import { DSQL_DatabaseSchemaType } from "../../types";
|
||||
import { DSQL_DATASQUIREL_USER_DATABASES } from "../../types/dsql";
|
||||
import numberfy from "../../utils/numberfy";
|
||||
import addDbEntry from "../../functions/backend/db/addDbEntry";
|
||||
import updateDbEntry from "../../functions/backend/db/updateDbEntry";
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
type Param = {
|
||||
userId?: number | string | null;
|
||||
@@ -35,10 +35,10 @@ export default async function checkDbRecordCreateDbSchema({
|
||||
} = dbSchema;
|
||||
|
||||
let recordedDbEntryArray = userId
|
||||
? await varDatabaseDbHandler({
|
||||
queryString: `SELECT * FROM datasquirel.user_databases WHERE db_full_name = ?`,
|
||||
queryValuesArray: [dbFullName || "NULL"],
|
||||
})
|
||||
? ((await dbHandler({
|
||||
query: `SELECT * FROM datasquirel.user_databases WHERE db_full_name = ?`,
|
||||
values: [dbFullName || "NULL"],
|
||||
})) as any[] | null)
|
||||
: undefined;
|
||||
|
||||
let recordedDbEntry: DSQL_DATASQUIREL_USER_DATABASES | undefined =
|
||||
@@ -65,10 +65,10 @@ export default async function checkDbRecordCreateDbSchema({
|
||||
});
|
||||
|
||||
if (newDbEntry.payload?.insertId) {
|
||||
recordedDbEntryArray = await varDatabaseDbHandler({
|
||||
queryString: `SELECT * FROM datasquirel.user_databases WHERE db_full_name = ?`,
|
||||
queryValuesArray: [dbFullName || "NULL"],
|
||||
});
|
||||
recordedDbEntryArray = (await dbHandler({
|
||||
query: `SELECT * FROM datasquirel.user_databases WHERE db_full_name = ?`,
|
||||
values: [dbFullName || "NULL"],
|
||||
})) as any[] | null;
|
||||
recordedDbEntry = recordedDbEntryArray?.[0];
|
||||
}
|
||||
} else if (recordedDbEntry?.id) {
|
||||
@@ -82,11 +82,8 @@ export default async function checkDbRecordCreateDbSchema({
|
||||
}
|
||||
|
||||
return recordedDbEntry;
|
||||
} catch (error) {
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Error Checking DB Record on Creating Schema`,
|
||||
error as Error
|
||||
);
|
||||
} catch (error: any) {
|
||||
console.log("Error =\u003e", error.message);
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import varDatabaseDbHandler from "../utils/varDatabaseDbHandler";
|
||||
import {
|
||||
DSQL_DatabaseSchemaType,
|
||||
DSQL_TableSchemaType,
|
||||
@@ -12,6 +11,7 @@ import {
|
||||
import sqlGenerator from "../../functions/dsql/sql/sql-generator";
|
||||
import numberfy from "../../utils/numberfy";
|
||||
import addDbEntry from "../../functions/backend/db/addDbEntry";
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
type Param = {
|
||||
userId?: number | string | null;
|
||||
@@ -54,10 +54,10 @@ export default async function checkTableRecordCreateDbSchema({
|
||||
});
|
||||
|
||||
let recordedTableEntryArray = userId
|
||||
? await varDatabaseDbHandler({
|
||||
queryString: queryObj?.string || "",
|
||||
queryValuesArray: queryObj?.values,
|
||||
})
|
||||
? ((await dbHandler({
|
||||
query: queryObj?.string || "",
|
||||
values: queryObj?.values,
|
||||
})) as any[] | null)
|
||||
: undefined;
|
||||
|
||||
let recordedTableEntry:
|
||||
@@ -98,21 +98,18 @@ export default async function checkTableRecordCreateDbSchema({
|
||||
});
|
||||
|
||||
if (newTableRecordEntry.payload?.insertId) {
|
||||
recordedTableEntryArray = await varDatabaseDbHandler({
|
||||
queryString: queryObj?.string || "",
|
||||
queryValuesArray: queryObj?.values,
|
||||
});
|
||||
recordedTableEntryArray = (await dbHandler({
|
||||
query: queryObj?.string || "",
|
||||
values: queryObj?.values,
|
||||
})) as any[] | null;
|
||||
|
||||
recordedTableEntry = recordedTableEntryArray?.[0];
|
||||
}
|
||||
}
|
||||
|
||||
return recordedTableEntry;
|
||||
} catch (error) {
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Error Checking Table Record on Creating Schema`,
|
||||
error as Error
|
||||
);
|
||||
} catch (error: any) {
|
||||
console.log("Error =\u003e", error.message);
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import varDatabaseDbHandler from "../utils/varDatabaseDbHandler";
|
||||
import {
|
||||
DSQL_IndexSchemaType,
|
||||
DSQL_MYSQL_SHOW_INDEXES_Type,
|
||||
} from "../../types";
|
||||
import grabDSQLSchemaIndexComment from "../utils/grab-dsql-schema-index-comment";
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
type Param = {
|
||||
tableName: string;
|
||||
@@ -22,10 +22,9 @@ export default async function handleIndexescreateDbFromSchema({
|
||||
tableName,
|
||||
indexes,
|
||||
}: Param) {
|
||||
const allExistingIndexes: DSQL_MYSQL_SHOW_INDEXES_Type[] =
|
||||
await varDatabaseDbHandler({
|
||||
queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``,
|
||||
});
|
||||
const allExistingIndexes = (await dbHandler({
|
||||
query: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``,
|
||||
})) as DSQL_MYSQL_SHOW_INDEXES_Type[];
|
||||
|
||||
for (let g = 0; g < indexes.length; g++) {
|
||||
const { indexType, indexName, indexTableFields, alias } = indexes[g];
|
||||
@@ -56,12 +55,11 @@ export default async function handleIndexescreateDbFromSchema({
|
||||
","
|
||||
)}) COMMENT '${grabDSQLSchemaIndexComment()} ${indexName}'`;
|
||||
|
||||
const addIndex = await varDatabaseDbHandler({ queryString });
|
||||
const addIndex = await dbHandler({ query: queryString });
|
||||
}
|
||||
}
|
||||
|
||||
const allExistingIndexesAfterUpdate: DSQL_MYSQL_SHOW_INDEXES_Type[] =
|
||||
await varDatabaseDbHandler({
|
||||
queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``,
|
||||
});
|
||||
const allExistingIndexesAfterUpdate = (await dbHandler({
|
||||
query: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``,
|
||||
})) as DSQL_MYSQL_SHOW_INDEXES_Type[];
|
||||
}
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
import noDatabaseDbHandler from "../utils/noDatabaseDbHandler";
|
||||
import varDatabaseDbHandler from "../utils/varDatabaseDbHandler";
|
||||
import createTable from "../utils/createTable";
|
||||
import updateTable from "../utils/updateTable";
|
||||
import { DSQL_DatabaseSchemaType } from "../../types";
|
||||
@@ -64,19 +62,19 @@ export default async function createDbFromSchema({
|
||||
|
||||
console.log(`Handling database => ${dbFullName}`);
|
||||
|
||||
const dbCheck: any = await noDatabaseDbHandler(
|
||||
`SELECT SCHEMA_NAME AS dbFullName FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${dbFullName}'`
|
||||
);
|
||||
const dbCheck: any = await dbHandler({
|
||||
query: `SELECT SCHEMA_NAME AS dbFullName FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${dbFullName}'`,
|
||||
});
|
||||
|
||||
if (!dbCheck?.[0]?.dbFullName) {
|
||||
const newDatabase = await noDatabaseDbHandler(
|
||||
`CREATE DATABASE IF NOT EXISTS \`${dbFullName}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`
|
||||
);
|
||||
const newDatabase = await dbHandler({
|
||||
query: `CREATE DATABASE IF NOT EXISTS \`${dbFullName}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`,
|
||||
});
|
||||
}
|
||||
|
||||
const allTables: any = await noDatabaseDbHandler(
|
||||
`SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='${dbFullName}'`
|
||||
);
|
||||
const allTables = (await dbHandler({
|
||||
query: `SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='${dbFullName}'`,
|
||||
})) as any[] | undefined;
|
||||
|
||||
let recordedDbEntry = await checkDbRecordCreateDbSchema({
|
||||
dbSchema: database,
|
||||
@@ -84,59 +82,32 @@ export default async function createDbFromSchema({
|
||||
isMain,
|
||||
});
|
||||
|
||||
for (let tb = 0; tb < allTables.length; tb++) {
|
||||
const { TABLE_NAME } = allTables[tb];
|
||||
if (allTables?.length) {
|
||||
for (let tb = 0; tb < allTables.length; tb++) {
|
||||
const { TABLE_NAME } = allTables[tb];
|
||||
|
||||
const targetTableSchema = tables.find(
|
||||
(_table) => _table.tableName === TABLE_NAME
|
||||
);
|
||||
|
||||
/**
|
||||
* @description Check if TABLE_NAME is part of the tables contained
|
||||
* in the user schema JSON. If it's not, the table is either deleted
|
||||
* or the table name has been recently changed
|
||||
*/
|
||||
if (!targetTableSchema) {
|
||||
console.log(
|
||||
`Dropping Table ${TABLE_NAME} from ${dbFullName}`
|
||||
const targetTableSchema = tables.find(
|
||||
(_table) => _table.tableName === TABLE_NAME
|
||||
);
|
||||
await varDatabaseDbHandler({
|
||||
queryString: `DROP TABLE \`${dbFullName}\`.\`${TABLE_NAME}\``,
|
||||
});
|
||||
|
||||
const deleteTableEntry = await dbHandler({
|
||||
query: `DELETE FROM datasquirel.user_database_tables WHERE user_id = ? AND db_slug = ? AND table_slug = ?`,
|
||||
values: [userId, dbSlug, TABLE_NAME],
|
||||
});
|
||||
/**
|
||||
* @description Check if TABLE_NAME is part of the tables contained
|
||||
* in the user schema JSON. If it's not, the table is either deleted
|
||||
* or the table name has been recently changed
|
||||
*/
|
||||
if (!targetTableSchema) {
|
||||
console.log(
|
||||
`Dropping Table ${TABLE_NAME} from ${dbFullName}`
|
||||
);
|
||||
await dbHandler({
|
||||
query: `DROP TABLE \`${dbFullName}\`.\`${TABLE_NAME}\``,
|
||||
});
|
||||
|
||||
// const oldTable = tables.find(
|
||||
// (_table) =>
|
||||
// _table.tableNameOld &&
|
||||
// _table.tableNameOld === TABLE_NAME
|
||||
// );
|
||||
|
||||
// /**
|
||||
// * @description Check if this table has been recently renamed. Rename
|
||||
// * table id true. Drop table if false
|
||||
// */
|
||||
// if (oldTable) {
|
||||
// console.log("Renaming Table");
|
||||
// await varDatabaseDbHandler({
|
||||
// queryString: `RENAME TABLE \`${dbFullName}\`.\`${oldTable.tableNameOld}\` TO \`${oldTable.tableName}\``,
|
||||
// });
|
||||
// } else {
|
||||
// console.log(
|
||||
// `Dropping Table ${TABLE_NAME} from ${dbFullName}`
|
||||
// );
|
||||
// await varDatabaseDbHandler({
|
||||
// queryString: `DROP TABLE \`${dbFullName}\`.\`${TABLE_NAME}\``,
|
||||
// });
|
||||
|
||||
// const deleteTableEntry = await dbHandler({
|
||||
// query: `DELETE FROM datasquirel.user_database_tables WHERE user_id = ? AND db_slug = ? AND table_slug = ?`,
|
||||
// values: [userId, dbSlug, TABLE_NAME],
|
||||
// });
|
||||
// }
|
||||
const deleteTableEntry = await dbHandler({
|
||||
query: `DELETE FROM datasquirel.user_database_tables WHERE user_id = ? AND db_slug = ? AND table_slug = ?`,
|
||||
values: [userId, dbSlug, TABLE_NAME],
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -156,8 +127,8 @@ export default async function createDbFromSchema({
|
||||
* @description Check if table exists
|
||||
* @type {any}
|
||||
*/
|
||||
const tableCheck: any = await varDatabaseDbHandler({
|
||||
queryString: `
|
||||
const tableCheck: any = await dbHandler({
|
||||
query: `
|
||||
SELECT EXISTS (
|
||||
SELECT
|
||||
TABLE_NAME
|
||||
@@ -167,7 +138,7 @@ export default async function createDbFromSchema({
|
||||
TABLE_SCHEMA = ? AND
|
||||
TABLE_NAME = ?
|
||||
) AS tableExists`,
|
||||
queryValuesArray: [dbFullName, table.tableName],
|
||||
values: [dbFullName, table.tableName],
|
||||
});
|
||||
|
||||
if (tableCheck && tableCheck[0]?.tableExists > 0) {
|
||||
|
||||
@@ -1,23 +1,11 @@
|
||||
require("dotenv").config({ path: "./../.env" });
|
||||
|
||||
import varDatabaseDbHandler from "../functions/backend/varDatabaseDbHandler";
|
||||
import dbHandler from "../functions/backend/dbHandler";
|
||||
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
|
||||
/**
|
||||
* Grab Schema
|
||||
*
|
||||
* @description Grab Schema
|
||||
*/
|
||||
varDatabaseDbHandler({
|
||||
queryString: `SELECT user_database_tables.*,user_databases.db_full_name FROM user_database_tables JOIN user_databases ON user_database_tables.db_id=user_databases.id`,
|
||||
dbHandler({
|
||||
query: `SELECT user_database_tables.*,user_databases.db_full_name FROM user_database_tables JOIN user_databases ON user_database_tables.db_id=user_databases.id`,
|
||||
database: "datasquirel",
|
||||
}).then(async (tables) => {
|
||||
}).then(async (tables: any) => {
|
||||
for (let i = 0; i < tables.length; i++) {
|
||||
const table = tables[i];
|
||||
const {
|
||||
@@ -30,16 +18,16 @@ varDatabaseDbHandler({
|
||||
table_description,
|
||||
} = table;
|
||||
|
||||
const tableInfo = await varDatabaseDbHandler({
|
||||
queryString: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`,
|
||||
const tableInfo = await dbHandler({
|
||||
query: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`,
|
||||
});
|
||||
|
||||
const updateDbCharset = await varDatabaseDbHandler({
|
||||
queryString: `ALTER DATABASE ${db_full_name} CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;`,
|
||||
const updateDbCharset = await dbHandler({
|
||||
query: `ALTER DATABASE ${db_full_name} CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;`,
|
||||
});
|
||||
|
||||
const updateEncoding = await varDatabaseDbHandler({
|
||||
queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`,
|
||||
const updateEncoding = await dbHandler({
|
||||
query: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
require("dotenv").config({ path: "./../.env" });
|
||||
import { AppNames } from "../dict/app-names";
|
||||
import serverError from "../functions/backend/serverError";
|
||||
import noDatabaseDbHandler from "./utils/noDatabaseDbHandler";
|
||||
|
||||
/**
|
||||
* # Create Database From Schema
|
||||
*/
|
||||
async function grantFullPrivileges({ userId }: { userId: string | null }) {
|
||||
/**
|
||||
* Grab Schema
|
||||
*
|
||||
* @description Grab Schema
|
||||
*/
|
||||
try {
|
||||
const defaultMariadbUserHost = process.env.DSQL_DB_HOST || "127.0.0.1";
|
||||
|
||||
const allDatabases = await noDatabaseDbHandler(`SHOW DATABASES`);
|
||||
|
||||
const datasquirelUserDatabases = allDatabases.filter((database: any) =>
|
||||
database.Database.match(new RegExp(`^${AppNames["DsqlDbPrefix"]}`))
|
||||
);
|
||||
|
||||
for (let i = 0; i < datasquirelUserDatabases.length; i++) {
|
||||
const datasquirelUserDatabase = datasquirelUserDatabases[i];
|
||||
const { Database } = datasquirelUserDatabase;
|
||||
}
|
||||
|
||||
const flushPriviledged = await noDatabaseDbHandler(`FLUSH PRIVILEGES`);
|
||||
} catch (error: any) {
|
||||
serverError({
|
||||
component: "shell/grantDbPriviledges/main-catch-error",
|
||||
message: error.message,
|
||||
user: { id: userId },
|
||||
});
|
||||
}
|
||||
|
||||
process.exit();
|
||||
}
|
||||
|
||||
const userArg = process.argv[process.argv.indexOf("--user")];
|
||||
const externalUser = process.argv[process.argv.indexOf("--user") + 1];
|
||||
|
||||
grantFullPrivileges({ userId: userArg ? externalUser : null });
|
||||
@@ -1,101 +0,0 @@
|
||||
import noDatabaseDbHandler from "../utils/noDatabaseDbHandler";
|
||||
|
||||
export interface GrantType {
|
||||
database: string;
|
||||
table: string;
|
||||
privileges: string[];
|
||||
}
|
||||
|
||||
type Param = {
|
||||
username?: string;
|
||||
host?: string;
|
||||
grants?: GrantType[];
|
||||
userId: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* # Handle Grants for Users
|
||||
*/
|
||||
export default async function handleGrants({
|
||||
username,
|
||||
host,
|
||||
grants,
|
||||
userId,
|
||||
}: Param): Promise<boolean> {
|
||||
let success = false;
|
||||
|
||||
console.log(`Handling Grants for User =>`, username, host);
|
||||
|
||||
if (!username) {
|
||||
console.log(`No username provided.`);
|
||||
return success;
|
||||
}
|
||||
|
||||
if (!host) {
|
||||
console.log(
|
||||
`No Host provided. \x1b[35m\`--host\`\x1b[0m flag is required`
|
||||
);
|
||||
return success;
|
||||
}
|
||||
|
||||
if (!grants) {
|
||||
console.log(`No grants Array provided.`);
|
||||
return success;
|
||||
}
|
||||
|
||||
try {
|
||||
const existingUser = await noDatabaseDbHandler(
|
||||
`SELECT * FROM mysql.user WHERE User = '${username}' AND Host = '${host}'`
|
||||
);
|
||||
|
||||
const isUserExisting = Boolean(existingUser?.[0]?.User);
|
||||
|
||||
if (isUserExisting) {
|
||||
const userGrants = await noDatabaseDbHandler(
|
||||
`SHOW GRANTS FOR '${username}'@'${host}'`
|
||||
);
|
||||
|
||||
for (let i = 0; i < userGrants.length; i++) {
|
||||
const grantObject = userGrants[i];
|
||||
const grant = grantObject?.[Object.keys(grantObject)[0]];
|
||||
|
||||
if (grant?.match(/GRANT .* PRIVILEGES ON .* TO/)) {
|
||||
const revokeGrantText = grant
|
||||
.replace(/GRANT/, "REVOKE")
|
||||
.replace(/ TO /, " FROM ");
|
||||
|
||||
const revokePrivilege = await noDatabaseDbHandler(
|
||||
revokeGrantText
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const grantsArray: GrantType[] = grants;
|
||||
|
||||
for (let i = 0; i < grantsArray.length; i++) {
|
||||
const grantObject = grantsArray[i];
|
||||
const { database, table, privileges } = grantObject;
|
||||
|
||||
const tableText = table == "*" ? "*" : `\`${table}\``;
|
||||
const databaseText =
|
||||
database == "*"
|
||||
? `\`${process.env.DSQL_USER_DB_PREFIX}${userId}_%\``
|
||||
: `\`${database}\``;
|
||||
|
||||
const privilegesText = privileges.includes("ALL")
|
||||
? "ALL PRIVILEGES"
|
||||
: privileges.join(", ");
|
||||
|
||||
const grantText = `GRANT ${privilegesText} ON ${databaseText}.${tableText} TO '${username}'@'${host}'`;
|
||||
|
||||
const grantPriviledge = await noDatabaseDbHandler(grantText);
|
||||
}
|
||||
}
|
||||
|
||||
success = true;
|
||||
} catch (/** @type {any} */ error: any) {
|
||||
console.log(`Error in adding SQL user =>`, error.message);
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
@@ -1,75 +0,0 @@
|
||||
require("dotenv").config({ path: "../../.env" });
|
||||
import generator from "generate-password";
|
||||
import noDatabaseDbHandler from "../utils/noDatabaseDbHandler";
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
import encrypt from "../../functions/dsql/encrypt";
|
||||
import grabSQLKeyName from "../../utils/grab-sql-key-name";
|
||||
|
||||
/**
|
||||
* # Reset SQL Passwords
|
||||
*/
|
||||
async function resetSQLCredentialsPasswords() {
|
||||
const users = (await dbHandler({
|
||||
query: `SELECT * FROM users`,
|
||||
})) as any[];
|
||||
|
||||
if (!users) {
|
||||
process.exit();
|
||||
}
|
||||
|
||||
for (let i = 0; i < users.length; i++) {
|
||||
const user = users[i];
|
||||
|
||||
if (!user) continue;
|
||||
|
||||
try {
|
||||
const maridbUsers = (await dbHandler({
|
||||
query: `SELECT * FROM mysql.user WHERE User = '${grabSQLKeyName(
|
||||
{ type: "user", userId: user.id }
|
||||
)}'`,
|
||||
})) as any[];
|
||||
|
||||
for (let j = 0; j < maridbUsers.length; j++) {
|
||||
const { User, Host } = maridbUsers[j];
|
||||
|
||||
const password = generator.generate({
|
||||
length: 16,
|
||||
numbers: true,
|
||||
symbols: true,
|
||||
uppercase: true,
|
||||
exclude: "*#.'`\"",
|
||||
});
|
||||
|
||||
const encryptedPassword = encrypt({
|
||||
data: password,
|
||||
encryptionKey: process.env.DSQL_ENCRYPTION_PASSWORD,
|
||||
encryptionSalt: process.env.DSQL_ENCRYPTION_SALT,
|
||||
});
|
||||
|
||||
await noDatabaseDbHandler(
|
||||
`SET PASSWORD FOR '${User}'@'${Host}' = PASSWORD('${password}')`
|
||||
);
|
||||
|
||||
if (user.mariadb_user == User && user.mariadb_host == Host) {
|
||||
const updateUser = await dbHandler({
|
||||
query: `UPDATE users SET mariadb_pass = ? WHERE id = ?`,
|
||||
values: [encryptedPassword, user.id],
|
||||
});
|
||||
}
|
||||
|
||||
console.log(
|
||||
`User ${user.id}: ${user.first_name} ${user.last_name} Password Updated successfully added.`
|
||||
);
|
||||
}
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Error Resetting MariaDB User Password`,
|
||||
error as Error
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
process.exit();
|
||||
}
|
||||
|
||||
resetSQLCredentialsPasswords();
|
||||
@@ -3,7 +3,7 @@ require("dotenv").config({ path: "../../../.env" });
|
||||
import fs from "fs";
|
||||
import { execSync } from "child_process";
|
||||
import EJSON from "../../../utils/ejson";
|
||||
import DB_HANDLER from "../../../utils/backend/global-db/DB_HANDLER";
|
||||
import dbHandler from "../../../functions/backend/dbHandler";
|
||||
import addDbEntry from "../../../functions/backend/db/addDbEntry";
|
||||
import addMariadbUser from "../../../functions/backend/addMariadbUser";
|
||||
import updateDbEntry from "../../../functions/backend/db/updateDbEntry";
|
||||
@@ -63,9 +63,9 @@ async function createUser() {
|
||||
password: password,
|
||||
});
|
||||
|
||||
let existingUser = await DB_HANDLER(
|
||||
`SELECT * FROM users WHERE email='${email}'`
|
||||
);
|
||||
let existingUser = (await dbHandler({
|
||||
query: `SELECT * FROM users WHERE email='${email}'`,
|
||||
})) as any[];
|
||||
|
||||
if (existingUser?.[0]) {
|
||||
console.log("User Exists");
|
||||
@@ -170,7 +170,7 @@ async function createUser() {
|
||||
|
||||
return true;
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(`Error Creating User`, error as Error);
|
||||
console.log("Error =\u003e", error.message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ async function createUser() {
|
||||
|
||||
return true;
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(`Error Updating User`, error as Error);
|
||||
console.log("Error =\u003e", error.message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import fs from "fs";
|
||||
require("dotenv").config({ path: "./../.env" });
|
||||
import varDatabaseDbHandler from "../functions/backend/varDatabaseDbHandler";
|
||||
import DB_HANDLER from "../utils/backend/global-db/DB_HANDLER";
|
||||
import dbHandler from "../functions/backend/dbHandler";
|
||||
|
||||
const userId =
|
||||
process.argv.indexOf("--userId") >= 0
|
||||
@@ -19,9 +18,9 @@ async function recoverMainJsonFromDb() {
|
||||
return;
|
||||
}
|
||||
|
||||
const databases = await DB_HANDLER(
|
||||
`SELECT * FROM user_databases WHERE user_id='${userId}'`
|
||||
);
|
||||
const databases = (await dbHandler({
|
||||
query: `SELECT * FROM user_databases WHERE user_id='${userId}'`,
|
||||
})) as any[];
|
||||
|
||||
const dbWrite = [];
|
||||
|
||||
@@ -38,9 +37,9 @@ async function recoverMainJsonFromDb() {
|
||||
tables: [],
|
||||
};
|
||||
|
||||
const tables = await DB_HANDLER(
|
||||
`SELECT * FROM user_database_tables WHERE user_id='${userId}' AND db_id='${id}'`
|
||||
);
|
||||
const tables = (await dbHandler({
|
||||
query: `SELECT * FROM user_database_tables WHERE user_id='${userId}' AND db_id='${id}'`,
|
||||
})) as any[];
|
||||
|
||||
for (let j = 0; j < tables.length; j++) {
|
||||
const { table_name, table_slug, table_description } = tables[j];
|
||||
@@ -52,10 +51,15 @@ async function recoverMainJsonFromDb() {
|
||||
indexes: [],
|
||||
};
|
||||
|
||||
const tableFields = await varDatabaseDbHandler({
|
||||
const tableFields = (await dbHandler({
|
||||
database: db_full_name,
|
||||
queryString: `SHOW COLUMNS FROM ${db_full_name}.${table_slug}`,
|
||||
});
|
||||
query: `SHOW COLUMNS FROM ${db_full_name}.${table_slug}`,
|
||||
})) as any[] | null;
|
||||
|
||||
if (!tableFields) {
|
||||
console.log("No table fields found");
|
||||
continue;
|
||||
}
|
||||
|
||||
for (let k = 0; k < tableFields.length; k++) {
|
||||
const { Field, Type, Null, Default, Key } = tableFields[k];
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
require("dotenv").config({ path: "./../.env" });
|
||||
import generator from "generate-password";
|
||||
import noDatabaseDbHandler from "./utils/noDatabaseDbHandler";
|
||||
import dbHandler from "../functions/backend/dbHandler";
|
||||
import encrypt from "../functions/dsql/encrypt";
|
||||
import grabSQLKeyName from "../utils/grab-sql-key-name";
|
||||
@@ -35,9 +34,9 @@ async function resetSQLCredentialsPasswords() {
|
||||
});
|
||||
const encryptedPassword = encrypt({ data: password });
|
||||
|
||||
await noDatabaseDbHandler(
|
||||
`SET PASSWORD FOR '${username}'@'${defaultMariadbUserHost}' = PASSWORD('${password}')`
|
||||
);
|
||||
await dbHandler({
|
||||
query: `SET PASSWORD FOR '${username}'@'${defaultMariadbUserHost}' = PASSWORD('${password}')`,
|
||||
});
|
||||
|
||||
const updateUser = await dbHandler({
|
||||
query: `UPDATE users SET mariadb_pass = ? WHERE id = ?`,
|
||||
@@ -48,10 +47,7 @@ async function resetSQLCredentialsPasswords() {
|
||||
`User ${user.id}: ${user.first_name} ${user.last_name} Password Updated successfully added.`
|
||||
);
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Error Updating MariaDB User`,
|
||||
error as Error
|
||||
);
|
||||
console.log("Error =\u003e", error.message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
require("dotenv").config({ path: "./../.env" });
|
||||
import generator from "generate-password";
|
||||
import noDatabaseDbHandler from "./utils/noDatabaseDbHandler";
|
||||
import dbHandler from "../functions/backend/dbHandler";
|
||||
import encrypt from "../functions/dsql/encrypt";
|
||||
import grabSQLKeyName from "../utils/grab-sql-key-name";
|
||||
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
|
||||
/**
|
||||
* # Set SQL Credentials
|
||||
*/
|
||||
async function setSQLCredentials() {
|
||||
const users = (await dbHandler({
|
||||
query: `SELECT * FROM users`,
|
||||
})) as any[] | null;
|
||||
|
||||
if (!users) {
|
||||
process.exit();
|
||||
}
|
||||
|
||||
for (let i = 0; i < users.length; i++) {
|
||||
const user = users[i];
|
||||
|
||||
if (!user) continue;
|
||||
if (user.mariadb_user && user.mariadb_pass) {
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
const username = grabSQLKeyName({ type: "user", userId: user.id });
|
||||
const password = generator.generate({
|
||||
length: 16,
|
||||
numbers: true,
|
||||
symbols: true,
|
||||
uppercase: true,
|
||||
exclude: "*#.'`\"",
|
||||
});
|
||||
const encryptedPassword = encrypt({ data: password });
|
||||
|
||||
await noDatabaseDbHandler(
|
||||
`CREATE USER IF NOT EXISTS '${username}'@'127.0.0.1' IDENTIFIED BY '${password}'`
|
||||
);
|
||||
|
||||
await noDatabaseDbHandler(
|
||||
`GRANT ALL PRIVILEGES ON \`datasquirel\\_user\\_${user.id}\\_%\`.* TO '${username}'@'127.0.0.1'`
|
||||
);
|
||||
await noDatabaseDbHandler(`FLUSH PRIVILEGES`);
|
||||
|
||||
const updateUser = await dbHandler({
|
||||
query: `UPDATE users SET mariadb_user = ?, mariadb_host = '127.0.0.1' mariadb_pass = ? WHERE id = ?`,
|
||||
values: [username, encryptedPassword, user.id],
|
||||
});
|
||||
|
||||
console.log(
|
||||
`User ${user.id}: ${user.first_name} ${user.last_name} SQL credentials successfully added.`
|
||||
);
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Error Setting SQL credentials`,
|
||||
error as Error
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setSQLCredentials();
|
||||
@@ -21,16 +21,13 @@ import grabDSQLConnection from "../utils/grab-dsql-connection";
|
||||
* @description If a database is provided, switch to it
|
||||
*/
|
||||
try {
|
||||
const result = await CONNECTION.query("SHOW DATABASES");
|
||||
const [result] = await CONNECTION.query("SHOW DATABASES");
|
||||
|
||||
const parsedResults = JSON.parse(JSON.stringify(result));
|
||||
|
||||
console.log("parsedResults =>", parsedResults);
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Error Testing External Server`,
|
||||
error as Error
|
||||
);
|
||||
console.log("Error =\u003e", error.message);
|
||||
} finally {
|
||||
await CONNECTION?.end();
|
||||
process.exit();
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
require("dotenv").config({ path: "./../.env" });
|
||||
import generator from "generate-password";
|
||||
import noDatabaseDbHandler from "./utils/noDatabaseDbHandler";
|
||||
import dbHandler from "../functions/backend/dbHandler";
|
||||
import encrypt from "../functions/dsql/encrypt";
|
||||
import grabSQLKeyName from "../utils/grab-sql-key-name";
|
||||
|
||||
/**
|
||||
* # Test SQL Escape
|
||||
*/
|
||||
export default async function testSQLEscape() {
|
||||
const users = (await dbHandler({
|
||||
query: `SELECT * FROM users`,
|
||||
})) as any[];
|
||||
|
||||
if (!users) {
|
||||
process.exit();
|
||||
}
|
||||
|
||||
for (let i = 0; i < users.length; i++) {
|
||||
const user = users[i];
|
||||
|
||||
if (!user) continue;
|
||||
|
||||
const defaultMariadbUserHost = process.env.DSQL_DB_HOST || "127.0.0.1";
|
||||
|
||||
try {
|
||||
const username = grabSQLKeyName({ type: "user", userId: user.id });
|
||||
const password = generator.generate({
|
||||
length: 16,
|
||||
numbers: true,
|
||||
symbols: true,
|
||||
uppercase: true,
|
||||
exclude: "*#.'`\"",
|
||||
});
|
||||
const encryptedPassword = encrypt({ data: password });
|
||||
|
||||
await noDatabaseDbHandler(
|
||||
`DROP USER '${username}'@'${defaultMariadbUserHost}'`
|
||||
);
|
||||
|
||||
await noDatabaseDbHandler(
|
||||
`CREATE USER IF NOT EXISTS '${username}'@'${defaultMariadbUserHost}' IDENTIFIED BY '${password}'`
|
||||
);
|
||||
|
||||
await noDatabaseDbHandler(
|
||||
`GRANT ALL PRIVILEGES ON \`datasquirel\\_user\\_${user.id}\\_%\`.* TO '${username}'@'${defaultMariadbUserHost}'`
|
||||
);
|
||||
|
||||
await noDatabaseDbHandler(`FLUSH PRIVILEGES`);
|
||||
|
||||
const updateUser = await dbHandler({
|
||||
query: `UPDATE users SET mariadb_user = ?, mariadb_host = ? mariadb_pass = ? WHERE id = ?`,
|
||||
values: [
|
||||
username,
|
||||
defaultMariadbUserHost,
|
||||
encryptedPassword,
|
||||
user.id,
|
||||
],
|
||||
});
|
||||
|
||||
console.log(
|
||||
`User ${user.id}: ${user.first_name} ${user.last_name} SQL credentials successfully added.`
|
||||
);
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(`Error Testing SQL Escape`, error as Error);
|
||||
}
|
||||
}
|
||||
|
||||
process.exit();
|
||||
}
|
||||
|
||||
testSQLEscape();
|
||||
@@ -1,4 +1,4 @@
|
||||
import DB_HANDLER from "../utils/backend/global-db/DB_HANDLER";
|
||||
import dbHandler from "../functions/backend/dbHandler";
|
||||
import fs from "fs";
|
||||
require("dotenv").config({ path: "./../.env" });
|
||||
|
||||
@@ -31,25 +31,20 @@ async function updateChildrenTablesOnDb() {
|
||||
|
||||
const WHERE_CLAUSE = `WHERE user_id='${userId}' AND db_slug='${db.dbSlug}' AND table_slug='${table.tableName}'`;
|
||||
|
||||
const existingTableInDb = await DB_HANDLER(
|
||||
`SELECT * FROM user_database_tables ${WHERE_CLAUSE}`
|
||||
);
|
||||
const existingTableInDb = (await dbHandler({
|
||||
query: `SELECT * FROM user_database_tables ${WHERE_CLAUSE}`,
|
||||
})) as any[];
|
||||
|
||||
if (existingTableInDb && existingTableInDb[0]) {
|
||||
const updateChildrenTablesInfo = await DB_HANDLER(
|
||||
`UPDATE user_database_tables SET child_table='1',child_table_parent_database='${originDbName}',child_table_parent_table='${originTableName}' WHERE id='${existingTableInDb[0].id}'`
|
||||
);
|
||||
if (existingTableInDb?.[0]) {
|
||||
const updateChildrenTablesInfo = await dbHandler({
|
||||
query: `UPDATE user_database_tables SET child_table='1',child_table_parent_database='${originDbName}',child_table_parent_table='${originTableName}' WHERE id='${existingTableInDb[0].id}'`,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Error Updating Children Tables on DB`,
|
||||
error as Error
|
||||
);
|
||||
}
|
||||
} catch (error) {}
|
||||
|
||||
process.exit();
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
require("dotenv").config({ path: "./../.env" });
|
||||
import varDatabaseDbHandler from "../functions/backend/varDatabaseDbHandler";
|
||||
import dbHandler from "../functions/backend/dbHandler";
|
||||
|
||||
/**
|
||||
* Grab Schema
|
||||
*
|
||||
* @description Grab Schema
|
||||
*/
|
||||
varDatabaseDbHandler({
|
||||
queryString: `SELECT user_database_tables.*,user_databases.db_full_name FROM user_database_tables JOIN user_databases ON user_database_tables.db_id=user_databases.id`,
|
||||
dbHandler({
|
||||
query: `SELECT user_database_tables.*,user_databases.db_full_name FROM user_database_tables JOIN user_databases ON user_database_tables.db_id=user_databases.id`,
|
||||
database: "datasquirel",
|
||||
}).then(async (tables) => {
|
||||
}).then(async (tables: any) => {
|
||||
for (let i = 0; i < tables.length; i++) {
|
||||
const table = tables[i];
|
||||
const {
|
||||
@@ -22,16 +22,16 @@ varDatabaseDbHandler({
|
||||
table_description,
|
||||
} = table;
|
||||
|
||||
const tableInfo = await varDatabaseDbHandler({
|
||||
queryString: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`,
|
||||
const tableInfo = await dbHandler({
|
||||
query: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`,
|
||||
});
|
||||
|
||||
const updateCreationDateTimestamp = await varDatabaseDbHandler({
|
||||
queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_created_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP`,
|
||||
const updateCreationDateTimestamp = await dbHandler({
|
||||
query: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_created_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP`,
|
||||
});
|
||||
|
||||
const updateDateTimestamp = await varDatabaseDbHandler({
|
||||
queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_updated_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`,
|
||||
const updateDateTimestamp = await dbHandler({
|
||||
query: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_updated_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`,
|
||||
});
|
||||
|
||||
console.log("Date Updated Column updated");
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
require("dotenv").config({ path: "./../.env" });
|
||||
|
||||
import serverError from "../functions/backend/serverError";
|
||||
import varDatabaseDbHandler from "./utils/varDatabaseDbHandler";
|
||||
import DB_HANDLER from "../utils/backend/global-db/DB_HANDLER";
|
||||
import dbHandler from "../functions/backend/dbHandler";
|
||||
|
||||
/** ****************************************************************************** */
|
||||
/** ****************************************************************************** */
|
||||
@@ -16,25 +15,22 @@ import DB_HANDLER from "../utils/backend/global-db/DB_HANDLER";
|
||||
*
|
||||
* @description Grab Schema
|
||||
*/
|
||||
varDatabaseDbHandler({
|
||||
queryString: `SELECT DISTINCT db_id FROM datasquirel.user_database_tables`,
|
||||
}).then(async (tables) => {
|
||||
// console.log(tables);
|
||||
// process.exit();
|
||||
|
||||
dbHandler({
|
||||
query: `SELECT DISTINCT db_id FROM datasquirel.user_database_tables`,
|
||||
}).then(async (tables: any) => {
|
||||
for (let i = 0; i < tables.length; i++) {
|
||||
const table = tables[i];
|
||||
|
||||
try {
|
||||
const { db_id } = table;
|
||||
|
||||
const dbSlug = await DB_HANDLER(
|
||||
`SELECT db_slug FROM user_databases WHERE id='${db_id}'`
|
||||
);
|
||||
const dbSlug = (await dbHandler({
|
||||
query: `SELECT db_slug FROM user_databases WHERE id='${db_id}'`,
|
||||
})) as any;
|
||||
|
||||
const updateTableSlug = await DB_HANDLER(
|
||||
`UPDATE user_database_tables SET db_slug='${dbSlug[0].db_slug}' WHERE db_id='${db_id}'`
|
||||
);
|
||||
const updateTableSlug = await dbHandler({
|
||||
query: `UPDATE user_database_tables SET db_slug='${dbSlug[0].db_slug}' WHERE db_id='${db_id}'`,
|
||||
});
|
||||
} catch (error: any) {
|
||||
serverError({
|
||||
component:
|
||||
@@ -42,11 +38,6 @@ varDatabaseDbHandler({
|
||||
message: error.message,
|
||||
user: {},
|
||||
});
|
||||
|
||||
global.ERROR_CALLBACK?.(
|
||||
`Error Updating DB Slugs For Table Records`,
|
||||
error as Error
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,13 +17,12 @@ import grabSQLKeyName from "../utils/grab-sql-key-name";
|
||||
const CONNECTION = await grabDSQLConnection();
|
||||
|
||||
try {
|
||||
const result = await CONNECTION.query(
|
||||
const [result] = await CONNECTION.query(
|
||||
"SELECT user,host,ssl_type FROM mysql.user"
|
||||
);
|
||||
const parsedResults = JSON.parse(JSON.stringify(result));
|
||||
|
||||
for (let i = 0; i < parsedResults.length; i++) {
|
||||
const user = parsedResults[i];
|
||||
for (let i = 0; i < result.length; i++) {
|
||||
const user = result[i];
|
||||
|
||||
if (
|
||||
user.User !== process.env.DSQL_DB_READ_ONLY_USERNAME ||
|
||||
@@ -39,14 +38,14 @@ import grabSQLKeyName from "../utils/grab-sql-key-name";
|
||||
continue;
|
||||
}
|
||||
|
||||
const addUserSSL = await CONNECTION.query(
|
||||
const [addUserSSL] = await CONNECTION.query(
|
||||
`ALTER USER '${User}'@'${Host}'`
|
||||
);
|
||||
|
||||
console.log(`addUserSSL => ${User}@${Host}`, addUserSSL);
|
||||
}
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(`Error Updating SSL Users`, error as Error);
|
||||
console.log("Error =\u003e", error.message);
|
||||
} finally {
|
||||
await CONNECTION?.end();
|
||||
process.exit();
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import varDatabaseDbHandler from "./varDatabaseDbHandler";
|
||||
import { DSQL_TableSchemaType } from "../../types";
|
||||
import {
|
||||
DSQL_DATASQUIREL_USER_DATABASE_TABLES,
|
||||
@@ -10,6 +9,7 @@ import addDbEntry from "../../functions/backend/db/addDbEntry";
|
||||
import slugToNormalText from "../../utils/slug-to-normal-text";
|
||||
import debugLog from "../../utils/logging/debug-log";
|
||||
import _ from "lodash";
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
type Param = {
|
||||
tableSchema?: DSQL_TableSchemaType;
|
||||
@@ -68,13 +68,13 @@ export default async function ({
|
||||
active_data: newTableSchema.updateData ? 1 : 0,
|
||||
};
|
||||
|
||||
const existingTable = await varDatabaseDbHandler({
|
||||
queryString: `SELECT * FROM ${targetDatabase}.${targetTableName} WHERE db_id = ? AND table_slug = ?`,
|
||||
queryValuesArray: [
|
||||
const existingTable = (await dbHandler({
|
||||
query: `SELECT * FROM ${targetDatabase}.${targetTableName} WHERE db_id = ? AND table_slug = ?`,
|
||||
values: [
|
||||
String(recordedDbEntry.id),
|
||||
String(newTableSchema.tableName),
|
||||
],
|
||||
});
|
||||
})) as any;
|
||||
|
||||
const table: DSQL_DATASQUIREL_USER_DATABASE_TABLES = existingTable?.[0];
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import varDatabaseDbHandler from "./varDatabaseDbHandler";
|
||||
import generateColumnDescription from "./generateColumnDescription";
|
||||
import supplementTable from "./supplementTable";
|
||||
import { DSQL_FieldSchemaType, DSQL_TableSchemaType } from "../../types";
|
||||
import { DSQL_DATASQUIREL_USER_DATABASES } from "../../types/dsql";
|
||||
import handleTableForeignKey from "./handle-table-foreign-key";
|
||||
import createTableHandleTableRecord from "./create-table-handle-table-record";
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
type Param = {
|
||||
dbFullName: string;
|
||||
@@ -68,8 +68,8 @@ export default async function createTable({
|
||||
|
||||
const createTableQuery = createTableQueryArray.join("\n");
|
||||
|
||||
const newTable = await varDatabaseDbHandler({
|
||||
queryString: createTableQuery,
|
||||
const newTable = await dbHandler({
|
||||
query: createTableQuery,
|
||||
});
|
||||
|
||||
for (let i = 0; i < finalTable.length; i++) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import grabSQLKeyName from "../../utils/grab-sql-key-name";
|
||||
import varDatabaseDbHandler from "./varDatabaseDbHandler";
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
type Param = {
|
||||
dbFullName: string;
|
||||
@@ -29,11 +29,11 @@ export default async function dropAllForeignKeys({
|
||||
// });
|
||||
// }
|
||||
|
||||
const foreignKeys = await varDatabaseDbHandler({
|
||||
queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\` WHERE Key_name LIKE '${grabSQLKeyName(
|
||||
const foreignKeys = (await dbHandler({
|
||||
query: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\` WHERE Key_name LIKE '${grabSQLKeyName(
|
||||
{ type: "foreign_key" }
|
||||
)}%'`,
|
||||
});
|
||||
})) as any;
|
||||
|
||||
for (const fk of foreignKeys) {
|
||||
if (
|
||||
@@ -41,8 +41,8 @@ export default async function dropAllForeignKeys({
|
||||
new RegExp(grabSQLKeyName({ type: "foreign_key" }))
|
||||
)
|
||||
) {
|
||||
await varDatabaseDbHandler({
|
||||
queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${fk.Key_name}\`
|
||||
await dbHandler({
|
||||
query: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${fk.Key_name}\`
|
||||
`,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import varDatabaseDbHandler from "./varDatabaseDbHandler";
|
||||
import { DSQL_ForeignKeyType } from "../../types";
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
type Param = {
|
||||
dbFullName: string;
|
||||
@@ -41,9 +41,9 @@ export default async function handleTableForeignKey({
|
||||
|
||||
// let finalQueryString = `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` ${foreinKeyText}`;
|
||||
|
||||
const addForeignKey = await varDatabaseDbHandler({
|
||||
queryString: finalQueryString,
|
||||
});
|
||||
const addForeignKey = (await dbHandler({
|
||||
query: finalQueryString,
|
||||
})) as any;
|
||||
|
||||
if (!addForeignKey?.serverStatus) {
|
||||
errorLogs?.push(addForeignKey);
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
export default async function noDatabaseDbHandler(
|
||||
queryString: string
|
||||
): Promise<any> {
|
||||
let results;
|
||||
|
||||
try {
|
||||
results = await dbHandler({ query: queryString });
|
||||
} catch (error: any) {
|
||||
global.ERROR_CALLBACK?.(`No DB Handler Error`, error as Error);
|
||||
}
|
||||
|
||||
if (results) {
|
||||
return results;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,3 @@
|
||||
import varDatabaseDbHandler from "./varDatabaseDbHandler";
|
||||
|
||||
import generateColumnDescription from "./generateColumnDescription";
|
||||
import {
|
||||
DSQL_DatabaseSchemaType,
|
||||
@@ -19,6 +17,7 @@ import handleIndexescreateDbFromSchema from "../createDbFromSchema/handle-indexe
|
||||
import _ from "lodash";
|
||||
import { writeUpdatedDbSchema } from "../createDbFromSchema/grab-required-database-schemas";
|
||||
import normalizeText from "../../utils/normalize-text";
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
type Param = {
|
||||
dbFullName: string;
|
||||
@@ -105,30 +104,31 @@ export default async function updateTable({
|
||||
* @description Iterate through each table index(if available)
|
||||
* and perform operations
|
||||
*/
|
||||
const allExistingIndexes: DSQL_MYSQL_SHOW_INDEXES_Type[] =
|
||||
await varDatabaseDbHandler({
|
||||
queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\` WHERE Index_comment LIKE '%schema_index%'`,
|
||||
});
|
||||
const allExistingIndexes = (await dbHandler({
|
||||
query: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\` WHERE Index_comment LIKE '%schema_index%'`,
|
||||
})) as DSQL_MYSQL_SHOW_INDEXES_Type[] | null;
|
||||
|
||||
for (let f = 0; f < allExistingIndexes.length; f++) {
|
||||
const { Key_name } = allExistingIndexes[f];
|
||||
if (allExistingIndexes) {
|
||||
for (let f = 0; f < allExistingIndexes.length; f++) {
|
||||
const { Key_name } = allExistingIndexes[f];
|
||||
|
||||
try {
|
||||
const existingKeyInSchema = tableIndexes?.find(
|
||||
(indexObject) => indexObject.alias === Key_name
|
||||
);
|
||||
if (!existingKeyInSchema)
|
||||
throw new Error(
|
||||
`This Index(${Key_name}) Has been Deleted!`
|
||||
try {
|
||||
const existingKeyInSchema = tableIndexes?.find(
|
||||
(indexObject) => indexObject.alias === Key_name
|
||||
);
|
||||
} catch (error) {
|
||||
/**
|
||||
* @description Drop Index: This happens when the MYSQL index is not
|
||||
* present in the datasquirel DB schema
|
||||
*/
|
||||
await varDatabaseDbHandler({
|
||||
queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${Key_name}\``,
|
||||
});
|
||||
if (!existingKeyInSchema)
|
||||
throw new Error(
|
||||
`This Index(${Key_name}) Has been Deleted!`
|
||||
);
|
||||
} catch (error) {
|
||||
/**
|
||||
* @description Drop Index: This happens when the MYSQL index is not
|
||||
* present in the datasquirel DB schema
|
||||
*/
|
||||
await dbHandler({
|
||||
query: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${Key_name}\``,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,10 +152,9 @@ export default async function updateTable({
|
||||
* @description Iterate through each datasquirel schema
|
||||
* table index(if available), and perform operations
|
||||
*/
|
||||
const allForeignKeys: DSQL_MYSQL_FOREIGN_KEYS_Type[] | null =
|
||||
await varDatabaseDbHandler({
|
||||
queryString: `SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = '${dbFullName}' AND TABLE_NAME='${tableName}' AND CONSTRAINT_TYPE='FOREIGN KEY'`,
|
||||
});
|
||||
const allForeignKeys = (await dbHandler({
|
||||
query: `SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = '${dbFullName}' AND TABLE_NAME='${tableName}' AND CONSTRAINT_TYPE='FOREIGN KEY'`,
|
||||
})) as DSQL_MYSQL_FOREIGN_KEYS_Type[] | null;
|
||||
|
||||
if (allForeignKeys) {
|
||||
for (let c = 0; c < allForeignKeys.length; c++) {
|
||||
@@ -170,8 +169,8 @@ export default async function updateTable({
|
||||
* @description Drop all foreign Keys to avoid MYSQL errors when adding/updating
|
||||
* Foreign keys
|
||||
*/
|
||||
const dropForeignKey = await varDatabaseDbHandler({
|
||||
queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP FOREIGN KEY \`${CONSTRAINT_NAME}\``,
|
||||
await dbHandler({
|
||||
query: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP FOREIGN KEY \`${CONSTRAINT_NAME}\``,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -182,19 +181,17 @@ export default async function updateTable({
|
||||
* @description Find all existing unique field constraints
|
||||
* and remove them
|
||||
*/
|
||||
const allUniqueConstraints: DSQL_MYSQL_FOREIGN_KEYS_Type[] | null =
|
||||
await varDatabaseDbHandler({
|
||||
queryString:
|
||||
normalizeText(`SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS \
|
||||
const allUniqueConstraints = (await dbHandler({
|
||||
query: normalizeText(`SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS \
|
||||
WHERE CONSTRAINT_SCHEMA = '${dbFullName}' AND TABLE_NAME='${tableName}' AND \
|
||||
CONSTRAINT_TYPE='UNIQUE'`),
|
||||
});
|
||||
})) as DSQL_MYSQL_FOREIGN_KEYS_Type[] | null;
|
||||
|
||||
if (allUniqueConstraints) {
|
||||
for (let c = 0; c < allUniqueConstraints.length; c++) {
|
||||
const { CONSTRAINT_NAME } = allUniqueConstraints[c];
|
||||
const dropUniqueConstraint = await varDatabaseDbHandler({
|
||||
queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${CONSTRAINT_NAME}\``,
|
||||
await dbHandler({
|
||||
query: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${CONSTRAINT_NAME}\``,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -205,9 +202,9 @@ export default async function updateTable({
|
||||
* @description Now handle all fields/columns
|
||||
*/
|
||||
let allExistingColumns: DSQL_MYSQL_SHOW_COLUMNS_Type[] =
|
||||
await varDatabaseDbHandler({
|
||||
queryString: `SHOW COLUMNS FROM \`${dbFullName}\`.\`${tableName}\``,
|
||||
});
|
||||
(await dbHandler({
|
||||
query: `SHOW COLUMNS FROM \`${dbFullName}\`.\`${tableName}\``,
|
||||
})) as DSQL_MYSQL_SHOW_COLUMNS_Type[];
|
||||
|
||||
/**
|
||||
* @type {string[]}
|
||||
@@ -239,8 +236,8 @@ export default async function updateTable({
|
||||
if (existingEntry.updatedField && existingEntry.fieldName) {
|
||||
updatedColumnsArray.push(existingEntry.fieldName);
|
||||
|
||||
const renameColumn = await varDatabaseDbHandler({
|
||||
queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` RENAME COLUMN \`${existingEntry.originName}\` TO \`${existingEntry.fieldName}\``,
|
||||
await dbHandler({
|
||||
query: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` RENAME COLUMN \`${existingEntry.originName}\` TO \`${existingEntry.fieldName}\``,
|
||||
});
|
||||
|
||||
console.log(
|
||||
@@ -284,9 +281,9 @@ export default async function updateTable({
|
||||
});
|
||||
}
|
||||
|
||||
allExistingColumns = await varDatabaseDbHandler({
|
||||
queryString: `SHOW COLUMNS FROM \`${dbFullName}\`.\`${tableName}\``,
|
||||
});
|
||||
allExistingColumns = (await dbHandler({
|
||||
query: `SHOW COLUMNS FROM \`${dbFullName}\`.\`${tableName}\``,
|
||||
})) as DSQL_MYSQL_SHOW_COLUMNS_Type[];
|
||||
} catch (error: any) {
|
||||
console.log("Update table error =>", error.message);
|
||||
}
|
||||
@@ -300,8 +297,8 @@ export default async function updateTable({
|
||||
|
||||
////////////////////////////////////////
|
||||
} else {
|
||||
await varDatabaseDbHandler({
|
||||
queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP COLUMN \`${Field}\``,
|
||||
await dbHandler({
|
||||
query: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP COLUMN \`${Field}\``,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -386,8 +383,8 @@ export default async function updateTable({
|
||||
* Alter directives like "ADD COLUMN" or "MODIFY COLUMN"
|
||||
*/
|
||||
if (updateTableQueryArray.length > 1) {
|
||||
const updateTable = await varDatabaseDbHandler({
|
||||
queryString: updateTableQuery,
|
||||
const updateTable = await dbHandler({
|
||||
query: updateTableQuery,
|
||||
});
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
import dbHandler from "../../functions/backend/dbHandler";
|
||||
|
||||
type Param = {
|
||||
queryString: string;
|
||||
queryValuesArray?: string[];
|
||||
};
|
||||
|
||||
/**
|
||||
* # DB handler for specific database
|
||||
*/
|
||||
export default async function varDatabaseDbHandler({
|
||||
queryString,
|
||||
queryValuesArray,
|
||||
}: Param): Promise<any> {
|
||||
/**
|
||||
* Declare variables
|
||||
*
|
||||
* @description Declare "results" variable
|
||||
*/
|
||||
let results;
|
||||
|
||||
/**
|
||||
* Fetch from db
|
||||
*
|
||||
* @description Fetch data from db if no cache
|
||||
*/
|
||||
try {
|
||||
if (
|
||||
queryString &&
|
||||
queryValuesArray &&
|
||||
Array.isArray(queryValuesArray) &&
|
||||
queryValuesArray[0]
|
||||
) {
|
||||
results = await dbHandler({
|
||||
query: queryString,
|
||||
values: queryValuesArray,
|
||||
});
|
||||
} else {
|
||||
results = await dbHandler({
|
||||
query: queryString,
|
||||
});
|
||||
}
|
||||
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
////////////////////////////////////////
|
||||
} catch (/** @type {any} */ error: any) {
|
||||
console.log("Shell Vardb Error =>", error.message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return results
|
||||
*
|
||||
* @description Return results add to cache if "req" param is passed
|
||||
*/
|
||||
return results;
|
||||
}
|
||||
Reference in New Issue
Block a user