-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathcli.js
More file actions
executable file
·82 lines (68 loc) · 2.23 KB
/
cli.js
File metadata and controls
executable file
·82 lines (68 loc) · 2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/env node
require("pretty-error").start();
const cliProgress = require("cli-progress");
const figlet = require("figlet");
const chalk = require("chalk");
const logger = require("./src/logger");
const { config, argv } = require("./src/loadconfig");
const mysql = require("./src/mysql");
const Realm = require("./src/realm");
const { getLastId, getSchemas } = require("./src/utils");
const { convert } = require("./src/convert");
const progressBar = new cliProgress.Bar({}, cliProgress.Presets.shades_classic);
const intro = () => {
logger.log(
chalk.green(
figlet.textSync("Mysql to Realm", {
font: "Small",
horizontalLayout: "default",
verticalLayout: "default"
})
)
);
};
(async function main() {
intro();
logger.debug("connecting to mysql");
const connection = await mysql.init(config.mysql);
const tableNames = Object.keys(config.tables || {});
logger.debug("erasing old Realm");
Realm.erase(config.realm);
for (let ii = 0; ii < tableNames.length; ii += 1) {
const tableName = tableNames[ii];
if (!argv.skip.includes(tableName)) {
logger.log(chalk.green(`Converting table: ${tableName}`));
const table = config.tables[tableName];
const { schema, convert: convertRules, filter: filterRule } = table;
if (schema) {
const schemas = getSchemas(config.tables, schema);
const realm = await Realm.init(config.realm, schemas);
const count = await mysql.getCount(tableName, filterRule);
const pages = Math.ceil(count / argv.chunk);
progressBar.start(pages - 1);
let lastID = -1;
for (let i = 0; i < pages; i += 1) {
// process page by page
progressBar.update(i);
const results = await mysql.getTableChunk(
tableName,
filterRule,
argv.chunk,
lastID
);
lastID = getLastId(results);
realm.write(() => {
results.forEach(element => {
const newElement = convert(element, convertRules);
realm.create(schema.name, newElement);
});
});
}
progressBar.stop();
realm.close();
}
}
}
connection.end();
process.exit();
})();