exportDataBase static method

Future<void> exportDataBase(
  1. bool fullExport,
  2. SortOrderType sortOrderType,
  3. String location,
  4. SchemaMetaData smd,
  5. SchemaMetaData smdSys,
)

Implementation

static Future<void> exportDataBase(
    bool fullExport,
    SortOrderType sortOrderType,
    String location,
    SchemaMetaData smd,
    SchemaMetaData smdSys) async {
  int? aboveTs = 0;
  // ------------------------------------------------------------------------------------------------------------- FETCH EXISTING TS
  bool doesLatestExist = await FileHelper.doesFileExist(location + "latest");
  DbTransaction mysqlTransaction =
      await DataBaseHelper.getDbTransaction(C_DATABASE_NAME);
  DbTransaction sqliteTransaction;
  if (!fullExport && doesLatestExist) {
    // INCREMENTAL - check latest ts
    sqliteTransaction = await DataBaseHelper.getSqlite3DbTransaction(
        location + "latest", null);
    WaterLineDao waterLineDao = WaterLineDao.sep(smdSys, sqliteTransaction);
    await waterLineDao.init(initTable: true);
    WaterLineDto waterLineDto;
    try {
      waterLineDto = await waterLineDao.getLatestWaterLineDto(null);
      aboveTs = waterLineDto.water_ts;
    } on SqlException catch (e) {
      if (e.sqlExceptionEnum != SqlExceptionEnum.ENTRY_NOT_FOUND &&
          e.sqlExceptionEnum != SqlExceptionEnum.FAILED_SELECT) rethrow;
    }
    await sqliteTransaction.endTransaction();
  }
  // ------------------------------------------------------------------------------------------------------------- SET DIRECTORY NAME
  String dateStr = FileHelper.getDateString();
  String ext = dateStr;
  if (aboveTs == 0) ext = dateStr + "_tmp";
  if (await FileHelper.doesFileExist(location + ext)) {
    print("DIRECTORY ALREADY EXISTS " + location + ext);
    return;
  }
  // ------------------------------------------------------------------------------------------------------------- PERFORM EXPORT
  await FileHelper.createEmptyDirectory(location + ext);
  sqliteTransaction =
      await DataBaseHelper.getSqlite3DbTransaction(location, ext);
  ReplicateDataBase replicateDataBase = ReplicateDataBase(
      WardenType.WRITE_SERVER,
      WardenType.WRITE_SERVER,
      smd,
      smdSys,
      mysqlTransaction,
      sqliteTransaction,
      true);

  int writtenCount =
      await replicateDataBase.reproduceDataBaseAboveTs(aboveTs, null);
  await mysqlTransaction.endTransaction();
  FileHelper.multipleFileTrim(location + ext, ".csv");

  if (writtenCount == 0) {
    // Delete the empty directory we just created
    await FileHelper.deleteDirectory(location + ext);
  } else {
    if (fullExport) {
      await FileHelper.createEmptyDirectory(location + dateStr + "_full");
      DbTransaction destTransaction =
          await DataBaseHelper.getSqlite3DbTransaction(
              location, dateStr + "_full");
      await copySystem(smd, smdSys, sqliteTransaction, destTransaction);
      await sqliteTransaction.endTransaction();
      await destTransaction.endTransaction();
      FileHelper.deleteMultipleEmptyFiles(location + ext);

      await FileHelper.createSymbolicDirectory(
          location + "latest", dateStr + "_full");
      FileHelper.multipleFileTrim(location + "latest", ".csv");
      print("Exported to " + location + dateStr + "_full");
    } else {
      await FileHelper.createSymbolicDirectory(location + "latest", ext);
      FileHelper.multipleFileTrim(location + "latest", ".csv");
      print("Exported to " + location + ext);
    }
  }
  await sqliteTransaction.endTransaction();
}