60 lines
2.1 KiB
TypeScript
60 lines
2.1 KiB
TypeScript
![]() |
import varDatabaseDbHandler from "../utils/varDatabaseDbHandler";
|
||
|
import { DSQL_IndexSchemaType } from "../../types";
|
||
|
|
||
|
type Param = {
|
||
|
tableName: string;
|
||
|
dbFullName: string;
|
||
|
indexes: DSQL_IndexSchemaType[];
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Handle DATASQUIREL Table Indexes
|
||
|
* ===================================================
|
||
|
* @description Iterate through each datasquirel schema
|
||
|
* table index(if available), and perform operations
|
||
|
*/
|
||
|
export default async function handleIndexescreateDbFromSchema({
|
||
|
dbFullName,
|
||
|
tableName,
|
||
|
indexes,
|
||
|
}: Param) {
|
||
|
for (let g = 0; g < indexes.length; g++) {
|
||
|
const { indexType, indexName, indexTableFields, alias } = indexes[g];
|
||
|
|
||
|
if (!alias?.match(/./)) continue;
|
||
|
|
||
|
/**
|
||
|
* @description Check for existing Index in MYSQL db
|
||
|
*/
|
||
|
try {
|
||
|
/**
|
||
|
* @type {import("../../types").DSQL_MYSQL_SHOW_INDEXES_Type[]}
|
||
|
* @description All indexes from MYSQL db
|
||
|
*/ // @ts-ignore
|
||
|
const allExistingIndexes: import("../../types").DSQL_MYSQL_SHOW_INDEXES_Type[] =
|
||
|
await varDatabaseDbHandler({
|
||
|
queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``,
|
||
|
});
|
||
|
|
||
|
const existingKeyInDb = allExistingIndexes.filter(
|
||
|
(indexObject) => indexObject.Key_name === alias
|
||
|
);
|
||
|
if (!existingKeyInDb[0])
|
||
|
throw new Error("This Index Does not Exist");
|
||
|
} catch (error) {
|
||
|
/**
|
||
|
* @description Create new index if determined that it
|
||
|
* doesn't exist in MYSQL db
|
||
|
*/
|
||
|
await varDatabaseDbHandler({
|
||
|
queryString: `CREATE${
|
||
|
indexType?.match(/fullText/i) ? " FULLTEXT" : ""
|
||
|
} INDEX \`${alias}\` ON \`${dbFullName}\`.\`${tableName}\`(${indexTableFields
|
||
|
?.map((nm) => nm.value)
|
||
|
.map((nm) => `\`${nm}\``)
|
||
|
.join(",")}) COMMENT 'schema_index'`,
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
}
|