Skip to content
This repository was archived by the owner on Oct 7, 2024. It is now read-only.

Commit a4f3f48

Browse files
feat(migration-scripts) add core_store cleanup
1 parent 3497248 commit a4f3f48

File tree

1 file changed

+77
-89
lines changed

1 file changed

+77
-89
lines changed

sql-blueprinting/index.js

Lines changed: 77 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import mysql from "mysql2";
2-
import chalk from "chalk";
3-
import { config } from "dotenv";
1+
import mysql from 'mysql2';
2+
import chalk from 'chalk';
3+
import { config } from 'dotenv';
44

55
config();
66

@@ -18,12 +18,12 @@ const connection = mysql.createConnection({
1818
connection.connect((err) => {
1919
if (err) throw err;
2020

21-
console.log("Connected to database!");
21+
console.log('Connected to database!');
2222

2323
const getTables = (db) => {
2424
return new Promise((resolve, reject) => {
2525
connection.query(
26-
"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ?",
26+
'SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ?',
2727
[db],
2828
(err, tables) => {
2929
if (err) reject(err);
@@ -33,23 +33,21 @@ connection.connect((err) => {
3333
});
3434
};
3535

36-
const dropTable = (table) => {
36+
const dropTable = (db, table) => {
3737
return new Promise((resolve, reject) => {
38-
connection.query(
39-
`DROP TABLE IF EXISTS ${db2}.??`,
40-
[table],
41-
(err, res) => {
42-
if (err) reject(err);
43-
return resolve(res);
44-
}
45-
);
38+
connection.query(`DROP TABLE IF EXISTS ??.??`, [db, table], (err, res) => {
39+
if (err) reject(err);
40+
return resolve(
41+
`The table ${chalk.bold.redBright(table)} does not exists in both databases. Dropping...`
42+
);
43+
});
4644
});
4745
};
4846

4947
const getColumns = (db, table) => {
5048
return new Promise((resolve, reject) => {
5149
connection.query(
52-
"SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?",
50+
'SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?',
5351
[db, table],
5452
(err, columns) => {
5553
if (err) reject(err);
@@ -59,53 +57,46 @@ connection.connect((err) => {
5957
});
6058
};
6159

62-
const dropColumn = (table, column) => {
63-
console.log("droping column: " + column + " from table" + table);
60+
const dropColumn = (db, table, column) => {
6461
return new Promise((resolve, reject) => {
65-
connection.query(
66-
`ALTER TABLE ${db2}.?? DROP COLUMN ??`,
67-
[table, column],
68-
(err, res) => {
69-
if (err) reject(err);
70-
return resolve(res);
71-
}
72-
);
62+
connection.query(`ALTER TABLE ??.?? DROP COLUMN ??`, [db, table, column], (err, res) => {
63+
if (err) reject(err);
64+
return resolve(
65+
`The column ${chalk.bold.redBright(
66+
column
67+
)} does not exists in both ${chalk.bold.redBright(table)} tables. Dropping...`
68+
);
69+
});
7370
});
7471
};
7572

76-
const getData = (targetTableName) => {
73+
const dropRow = (db, table, column, value) => {
7774
return new Promise((resolve, reject) => {
78-
connection.query(
79-
`SELECT * FROM ${db2}.?`,
80-
[targetTableName],
81-
(err, columns) => {
82-
if (err) reject(err);
83-
return resolve(columns);
84-
}
85-
);
75+
connection.query(`DELETE FROM ??.?? WHERE ?? = ?`, [db, table, column, value], (err, res) => {
76+
if (err) reject(err);
77+
return resolve(
78+
`The row ${chalk.bold.redBright(value)} does not exists in both ${chalk.bold.redBright(
79+
table
80+
)} tables. Dropping...`
81+
);
82+
});
8683
});
8784
};
8885

89-
const setData = (columns, targetTableName) => {
86+
const toggleForeignKeyCheck = (state) => {
9087
return new Promise((resolve, reject) => {
91-
columns.forEach((entry) => {
92-
connection.query(
93-
`INSERT INTO ${db1}.? VALUES (?) `,
94-
[targetTableName, entry],
95-
(err, results) => {
96-
if (err) reject(err);
97-
return resolve(results);
98-
}
99-
);
88+
connection.query(`SET FOREIGN_KEY_CHECKS = ${state}`, (err, results) => {
89+
if (err) reject(err);
90+
return resolve('Foreign Key Check is set to ' + state + '!');
10091
});
10192
});
10293
};
10394

104-
const toggleForeignKeyCheck = (state) => {
95+
const getCoreStore = (db) => {
10596
return new Promise((resolve, reject) => {
106-
connection.query(`SET FOREIGN_KEY_CHECKS = ${state}`, (err, results) => {
97+
connection.query('SELECT * FROM ??.core_store', [db], (err, coreStore) => {
10798
if (err) reject(err);
108-
return resolve("Foreign Key Check is set to " + state + "!");
99+
return resolve(coreStore);
109100
});
110101
});
111102
};
@@ -123,66 +114,63 @@ connection.connect((err) => {
123114
tableNames_db2.forEach(async (table_db2, tableIndex) => {
124115
let tableExistanceFlag = false;
125116
let targetTableName = table_db2.TABLE_NAME;
126-
127117
tableNames_db1.forEach((table_db1) => {
128118
if (targetTableName === table_db1.TABLE_NAME) {
129119
tableExistanceFlag = true;
130120
}
131121
});
132-
if (tableExistanceFlag) {
122+
if (tableExistanceFlag && targetTableName !== 'core_store') {
123+
console.log(
124+
`The table ${chalk.bold.greenBright(targetTableName)} exists in both databases.`
125+
);
133126
const columns_db1 = await getColumns(db1, targetTableName);
134127
const columns_db2 = await getColumns(db2, targetTableName);
135-
let columnsCountEquality = false;
136-
if (columns_db1.length === columns_db2.length) {
137-
columnsCountEquality = true;
138-
} else {
139-
columns_db2.forEach(async (column_db2) => {
140-
let columnExistanceFlag = false;
141-
let columnNameDB2 = column_db2.COLUMN_NAME;
128+
columns_db2.forEach(async (column_db2) => {
129+
let columnExistanceFlag = false;
130+
let columnNameDB2 = column_db2.COLUMN_NAME;
142131

143-
columns_db1.forEach((column_db1) => {
144-
if (columnNameDB2 === column_db1.COLUMN_NAME) {
145-
columnExistanceFlag = true;
146-
}
147-
});
148-
if (!columnExistanceFlag) {
149-
await dropColumn(targetTableName, columnNameDB2);
132+
columns_db1.forEach((column_db1) => {
133+
if (columnNameDB2 === column_db1.COLUMN_NAME) {
134+
columnExistanceFlag = true;
150135
}
151136
});
152-
}
153-
console.log(
154-
`The table ${chalk.bold.greenBright(
155-
targetTableName
156-
)} exists in both databases ${
157-
columnsCountEquality
158-
? "and columns count " +
159-
chalk.bold.greenBright("is equal") +
160-
"."
161-
: "but columns count " +
162-
chalk.bold.redBright("is not equal") +
163-
"."
164-
}`
165-
);
137+
if (!columnExistanceFlag) {
138+
const dropColumnMsg = await dropColumn(db2, targetTableName, columnNameDB2);
139+
console.log(dropColumnMsg);
140+
}
141+
});
142+
} else if (targetTableName === 'core_store') {
143+
const coreStore1 = await getCoreStore(db1);
144+
const coreStore2 = await getCoreStore(db2);
145+
coreStore2.forEach(async (coreStore2Item) => {
146+
let coreStoreExistanceFlag = false;
147+
let coreStore2ItemKey = coreStore2Item.key;
148+
coreStore1.forEach((coreStore1Item) => {
149+
if (coreStore2ItemKey === coreStore1Item.key) {
150+
coreStoreExistanceFlag = true;
151+
}
152+
});
153+
if (!coreStoreExistanceFlag) {
154+
const dropRowMsg = await dropRow(db2, targetTableName, 'key', coreStore2ItemKey);
155+
console.log(dropRowMsg);
156+
}
157+
});
166158
} else {
167-
console.log(
168-
`The table ${chalk.bold.redBright(
169-
targetTableName
170-
)} does not exists in both databases`
171-
);
172-
await dropTable(targetTableName);
159+
const dropTableMsg = await dropTable(db2, targetTableName);
160+
console.log(dropTableMsg);
173161
}
174162
if (tableIndex === tableNames_db2.length - 1) {
175163
resolve();
176164
}
177165
});
178166
});
179167
foreignKeyCheckState = 1;
180-
toggleForeignKeyCheck(foreignKeyCheckState).then((res) =>
181-
console.log(chalk.bold.yellowBright(res))
182-
);
183-
184-
console.log("Database cleanup is done, closing connection...");
185-
connection.end();
168+
toggleForeignKeyCheck(foreignKeyCheckState)
169+
.then((res) => console.log(chalk.bold.yellowBright(res)))
170+
.then(() => {
171+
console.log('Database cleanup is done, closing connection...');
172+
connection.end();
173+
});
186174
} catch (err) {
187175
console.log(err);
188176
}

0 commit comments

Comments
 (0)