addEntry static method

Future<void> addEntry(
  1. int table_id,
  2. String? csv,
  3. WaterState waterState,
  4. SchemaMetaData smd,
  5. SchemaMetaData smdSys,
)

Implementation

static Future<void> addEntry(int table_id, String? csv, WaterState waterState,
    SchemaMetaData smd, SchemaMetaData smdSys) async {
  WardenType localWardenType = WardenType.WRITE_SERVER;
  WardenType remoteWardenType = WardenType.WRITE_SERVER;
  switch (waterState) {
    case WaterState.CLIENT_STORED:
    case WaterState.CLIENT_REJECTED:
    case WaterState.CLIENT_APPROVED:
      remoteWardenType = WardenType.ADMIN;
      break;
    case WaterState.SERVER_PENDING:
      remoteWardenType = WardenType.USER;
      break;
    case WaterState.SERVER_APPROVED:
    case WaterState.SERVER_REJECTED:
      break;
    default:
      throw ArgumentError("Invalid WaterState " + waterState.toString());
  }
  List<List<dynamic>> csvList = const CsvToListConverter().convert(csv,
      fieldDelimiter: '|',
      textDelimiter: "'",
      textEndDelimiter: "'",
      eol: '\n');
  TableMetaData tmd = smd.getTableByTableId(table_id);
  int offset = 0;
  FieldData fieldData = FieldData.wee(table_id);
  csvList.forEach((List<dynamic> list) {
    list.forEach((dynamic element) {
      FieldMetaData fmd = tmd.getFieldByIndex(offset + 1);
      fieldData.set(fmd.fieldName, element);
      offset++;
    });
  });
  DbTransaction mysqlTransaction =
      await DataBaseHelper.getDbTransaction(C_DATABASE_NAME);
  try {
    TrDto trDto = TrDto.sep(null, OperationType.INSERT, 0, null,
        'Command Line Insert', null, table_id,
        fieldData: fieldData);
    TableTransactions tableTransactions = TableTransactions.sep(trDto);
    await tableTransactions.init(
        localWardenType, remoteWardenType, smd, smdSys, mysqlTransaction);
    AbstractWarden warden =
        WardenFactory.getAbstractWarden(localWardenType, remoteWardenType);
    await warden.init(smd, smdSys, mysqlTransaction);
    warden.initialize(tableTransactions, passedWaterState: waterState);
    RemoteDto? remoteDto = null;
    try {
      remoteDto = await warden.write();
    } on SqlException catch (e) {
      if (e.sqlExceptionEnum == SqlExceptionEnum.PARTITION_NOT_FOUND ||
          e.sqlExceptionEnum == SqlExceptionEnum.FAILED_UPDATE ||
          e.sqlExceptionEnum == SqlExceptionEnum.ENTRY_NOT_FOUND ||
          e.sqlExceptionEnum == SqlExceptionEnum.FAILED_SELECT) {
        print("$e");
      }
    }
  } finally {
    await mysqlTransaction.connection.close();
    await mysqlTransaction.endTransaction();
    await mysqlTransaction.closePool();
  }
}