-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathseedReviews.js
66 lines (55 loc) · 2.01 KB
/
seedReviews.js
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
const Promise = require('bluebird');
const fs = Promise.promisifyAll(require('fs'));
const tables = require('./reviewTables.js');
const mysql = require('mysql');
const databaseName = 'open_source_table_reviews';
var db = mysql.createConnection({
url: 'localhost',
user: 'root',
password: '' // TODO: Update with your MySQL password
});
var seedTable = function(table) {
return new Promise((res, rej) => {
var getData = fs.readFileAsync(table.dataFile, 'utf8');
var createQuery = function(row) {
let entry = [];
for (let i = 0; i < table.fields.length; ++i) {
let str = row[table.fields[i]];
if (table.fields[i] === 'date' || table.fields[i] === 'yelping_since') {
str = str.replace(/[T|Z]/g, char => char === 'T' ? ' ' : '' );
}
if (typeof str === 'string') {
str = str.replace(/['|\\]/g, char => char === "'" ? "''" : '\\\\');
str = '\'' + str + '\'';
}
entry.push(str);
}
return '(' + entry.join(',') + ')';
};
getData.then(data => {
db.query(`use ${databaseName}`)
.then(() => db.query(`drop table if exists ${table.name}`))
.then(() => db.query(`create table ${table.name} ${table.schema}`))
.then(() => {
const parsedData = JSON.parse(data);
return Promise.map(parsedData, function(row) {
return db.query(`insert into ${table.name} values ${createQuery(row)}`);
});
})
.then(() => {
console.log(`Finished seeding table: ${table.name}`);
res();
})
.catch(error => {
console.log(`Error seeding table ${table.name}`, error);
rej(error);
});
});
});
};
db.query = Promise.promisify(db.query);
db.connect = Promise.promisify(db.connect);
db.connect()
.then(() => db.query(`drop database if exists ${databaseName}`))
.then(() => db.query(`create database if not exists ${databaseName}`))
.then(() => Promise.map(tables, seedTable).then(() => db.end()));