Database worker code documentation

databaseWorker.js

// initialize database 
const {database} = require('../scripts/databaseInit.js');
//read processed data line by line
liner = new lineByLine(path.join(process.resourcesPath, '..', 'data', 'Stats', 'Patterns.txt'));
/*
* read processed data line by line
* split each records in pattern string, popularity and file address
* add splited values to pattern database table
* catch any error or else count successful addition
*/
// database transaction, this will rollback half completed operation automatically
database.transaction('rw', database.Patterns, async () => {

  //iterate over file
  while (line = liner.next()) {
    
    //split line as per delimiter
    splitter = line.toString().split('<|>');
    
    //to check file strings are in correct format => "pattern<|>address<|>popularity"
    if(splitter.length != 3){
      continue;
    }
    
    //add records to database table
    await database.Patterns.add({
      pattern: splitter[0],
      address: splitter[1],
      popularity: splitter[2]
    }).then(function(){
      addedRecords++;
      lineNumber++; 
    }).catch(async function (e) {
      //if record already exist in database then
      if((e.name == "ConstraintError") && (e.message == 'Key already exists in the object store.')){
        //check if popularity is greater than what we have in database
        await database.Patterns.where('pattern')
          .equalsIgnoreCase(splitter[0])
          .and(function(record) { return record.popularity < splitter[2];})
          .toArray (function (isSmall) {
            //if yes then update popularity
            if(isSmall.length){
              database.Patterns.where('pattern').equals(splitter[0]).modify({"popularity": splitter[2]});
            }
          });
      }else{
        console.error(e.name + ': ' +e.message);
      }
      duplicates++;
      lineNumber++;
    });
  }
}).then(function(){
  //pass successful and unsuccessful records number to main thread.
  postMessage(addedRecords.toString() + "," + duplicates.toString());//use when you are using a web worker
  return;
}).catch(error => {
  console.error(error);
  return;
});