11import { 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