Skip to content

Commit c4e6e48

Browse files
committed
Feat: Batch insert
1 parent d18c445 commit c4e6e48

File tree

1 file changed

+25
-5
lines changed

1 file changed

+25
-5
lines changed

src/index.ts

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,30 @@
11
import { promises as fs } from "fs";
22

3-
async function writeSQL(statement: string, saveFileAs = "") {
3+
async function writeSQL(statement: string, saveFileAs = "", isAppend: boolean = false) {
44
try {
55
const destinationFile = process.argv[2] || saveFileAs;
66

77
if (!destinationFile) {
88
throw new Error("Missing saveFileAs parameter");
99
}
1010

11-
await fs.writeFile(`sql/${process.argv[2]}.sql`, statement);
11+
if(isAppend){
12+
await fs.appendFile(`sql/${process.argv[2]}.sql`, statement);
13+
}else{
14+
await fs.writeFile(`sql/${process.argv[2]}.sql`, statement);
15+
}
16+
1217
} catch (err) {
1318
console.log(err);
1419
}
1520
}
1621

17-
async function readCSV(csvFileName = "") {
22+
async function readCSV(csvFileName = "", batchSize: number = 0) {
1823
try {
1924
const fileAndTableName = process.argv[2] || csvFileName;
25+
26+
batchSize = parseInt(process.argv[3]) || batchSize || 500;
27+
let isAppend: boolean = false;
2028

2129
if (!fileAndTableName) {
2230
throw new Error("Missing csvFileName parameter");
@@ -34,7 +42,7 @@ async function readCSV(csvFileName = "") {
3442
beginSQLInsert = beginSQLInsert.slice(0, -2) + ")\nVALUES\n";
3543

3644
let values = "";
37-
linesArray.forEach((line) => {
45+
linesArray.forEach((line, index) => {
3846
// Parses each line of CSV into field values array
3947
const arr = line.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);
4048

@@ -46,6 +54,18 @@ async function readCSV(csvFileName = "") {
4654
throw new Error("Too Few Values in row");
4755
}
4856

57+
// Check batch size (rows per batch)
58+
if(index > 0 && index % batchSize == 0){
59+
values = values.slice(0, -2) + ";\n\n";
60+
61+
const sqlStatement = beginSQLInsert + values;
62+
63+
// Write File
64+
writeSQL(sqlStatement, fileAndTableName, isAppend);
65+
values = "";
66+
isAppend = true;
67+
}
68+
4969
let valueLine = "\t(";
5070
arr.forEach((value) => {
5171
// Matches NULL values, Numbers,
@@ -70,7 +90,7 @@ async function readCSV(csvFileName = "") {
7090
const sqlStatement = beginSQLInsert + values;
7191

7292
// Write File
73-
writeSQL(sqlStatement);
93+
writeSQL(sqlStatement, fileAndTableName, isAppend);
7494
} catch (err) {
7595
console.log(err);
7696
}

0 commit comments

Comments
 (0)