code: public void run() {
          m_appThread = Thread.currentThread();
          validateRootFolder();
          openDatabase();
          deleteApplication();
          createApplication();
          startWorkers();
          
          long startTime = System.currentTimeMillis();
          loadFolder(new File(m_config.root));
          stopWorkers();
              
          // If loading an OLAP shard, merge the results.
          if (m_bOLAPApp) {
              m_logger.info("Merging shard: {}", m_config.shard);
              ((OLAPSession)m_session).mergeShard(m_config.shard, null);
          }
          
          // Display final statistics.
          long stopTime = System.currentTimeMillis();
          m_logger.info("Total files loaded:    {}", m_totalFiles);
          m_logger.info("Total lines scanned:   {}", m_totalLines);
          m_logger.info("Total bytes read:      {}", m_totalBytes);
          long totalMillis = stopTime - startTime;
          m_logger.info("Total time for load:   {}", Utils.formatElapsedTime(totalMillis));
          m_logger.info("Average lines/sec:     {}", ((m_totalLines * 1000) / totalMillis));
          m_logger.info("Average bytes/sec:     {}", ((m_totalBytes * 1000) / totalMillis));
          
          // Done with the client connection.
          m_client.close();
      }
docs: Performs the CSV load as defined by the {@link CSVConfig} singleton object.
  This method can be called instead of {@link #main(String[])} for programmatic
  access. Parameters should be set first by direct access to the CSVConfig
  object or by calling {@link CSVConfig#set(String, String)}.