exportDataBase static method
Future<void>
exportDataBase(
- bool fullExport,
- SortOrderType sortOrderType,
- String location,
- SchemaMetaData smd,
- 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();
}