-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathimport.js
More file actions
127 lines (108 loc) · 2.88 KB
/
import.js
File metadata and controls
127 lines (108 loc) · 2.88 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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
const fs = require('fs');
const mysql = require('mysql');
const knownFormats = [
'bol_00',
'bol_10',
'bol_20',
'bol_30',
'bol_40',
'bol_50',
'bol_60',
'bol_61',
'bol_62',
'bol_70',
'bol_71',
'bol_80'
];
const convertName = (name) => {
return name.toLowerCase().replace(/\s/g, '_');
};
const connection = mysql.createConnection({
host : process.env.MYSQL_HOST,
user : process.env.MYSQL_USER,
password : process.env.MYSQL_PASSWORD,
database : process.env.MYSQL_DB
})
const parseImport = (body) => {
const parsed = body.split('\n');
let entry = {};
let pointer = 0;
let queries = [];
let query = '';
let sql = '';
let keys = {};
console.log(k, i);
parsed.forEach((line) => {
pointer = 0
recordType = line.substr(pointer,2);
entry = {}
if(knownFormats.indexOf('bol_' + recordType) >= 0) {
keys['bol_' + recordType] = [];
formats['bol_' + recordType].forEach((format) => {
keys['bol_' + recordType].push(convertName(format.name));
entry[convertName(format.name)] = String(line.substr(pointer, format.length)).trim();
pointer += format.length;
});
//console.log(entry);
entries['bol_' + recordType].push(entry);
} else {
console.log('SKIPPING RECORD', recordType);
}
i += 1;
});
connection.connect();
knownFormats.forEach((table) => {
a = 0;
queries = [];
entries[table].forEach((entry) => {
values = [];
a += 1;
keys[table].forEach((key) => {
values.push(connection.escape(entry[key]));
});
queries.push('(' + values.join(',') + ')');
if(a % 1000 === 0 || a >= entries[table].length) {
sql = 'INSERT INTO `' + table + '` (`' + keys[table].join('`,`') + '`) VALUES ' + queries.join(',') + ';';
connection.query(sql, (error, results, fields) => {
});
queries = [];
}
});
});
}
const testmode = process.argv[2];
let entries = {};
let formats = {};
let i = 0;
let k = 0;
let a = 0;
let recordType;
knownFormats.forEach((file) => {
formats[file] = JSON.parse(fs.readFileSync(file + '.json', 'utf8'));
entries[file] = [];
});
import.handler = function(event, context, callback) {
// Retrieve the bucket & key for the uploaded S3 object that
// caused this Lambda function to be triggered
var src_bkt = event.Records[0].s3.bucket.name;
var src_key = event.Records[0].s3.object.key;
// Retrieve the object
s3.getObject({
Bucket: src_bkt,
Key: src_key
}, function(err, data) {
if (err) {
console.log(err, err.stack);
callback(err);
} else {
parseImport(data.Body.toString('ascii'));
callback(null, null);
}
});
};
if(testmode == 'true') {
fs.readFile('ACEFOI.20160201 copy.txt', 'utf8', (err, data) => {
if (err) throw err;
parseImport(data);
});
}