getNextId method

Future<int> getNextId(
  1. WardenType wardenType
)

Implementation

Future<int> getNextId(WardenType wardenType) async {
  if (Warden.isClient(wardenType)) {
    return await _getNextIdForUser();
  } else {
    int? nextId = null;
    nextId = await _getHoleFreeMaxIndex();
    if (nextId == null) {
      String sql = "   SELECT " +
          getIndex +
          "-1 AS NEXT_ID " +
          "     FROM " +
          tableName +
          " t1 " +
          " WHERE NOT EXISTS " +
          "          (SELECT * " +
          "             FROM " +
          tableName +
          " t2 " +
          "            WHERE t1." +
          getIndex +
          " -1 = t2." +
          getIndex +
          "          ) " +
          "      AND " +
          getIndex +
          ">1 " +
          " ORDER BY " +
          getIndex +
          " DESC";

      RawTableData rawTableData;
      try {
        rawTableData = await transaction
            .getConnection()
            .query(sql, FieldData.wee(table_id));
      } on SqlException catch (e) {
        throw SqlException(e.sqlExceptionEnum,
            cause: e.cause,
            sql: sql,
            json: "{ tableName:'$tableName', index:'$getIndex' }");
      }
      try {
        nextId = rawTableData.getRawField(0, 0) as int;
      } on RangeError {}
      if (nextId == null) nextId = 1;
    }
    return nextId;
  }
}