DakotaAlgorithmRecord_Impl::DakotaAlgorithmRecord_Impl(const QSqlQuery& query,
                                                         ProjectDatabase& database)
    : AlgorithmRecord_Impl(query, database)
  {
    OS_ASSERT(query.isValid());
    OS_ASSERT(query.isActive());
    OS_ASSERT(query.isSelect());

    QVariant value;

    value = query.value(DakotaAlgorithmRecord::ColumnsType::dakotaAlgorithmRecordType);
    OS_ASSERT(value.isValid() && !value.isNull());
    m_dakotaAlgorithmRecordType = DakotaAlgorithmRecordType(value.toInt());

    value = query.value(DakotaAlgorithmRecord::ColumnsType::dakotaRestartFileRecordId);
    if (value.isValid() && !value.isNull()) {
      m_dakotaRestartFileRecordId = value.toInt();
    }

    value = query.value(DakotaAlgorithmRecord::ColumnsType::dakotaOutFileRecordId);
    if (value.isValid() && !value.isNull()) {
      m_dakotaOutFileRecordId = value.toInt();
    }

    value = query.value(DakotaAlgorithmRecord::ColumnsType::jobUUID);
    if (value.isValid() && !value.isNull() && !value.toString().isEmpty()) {
      m_jobUUID = openstudio::UUID(value.toString());
    }
  }
  bool DakotaAlgorithmRecord_Impl::compareValues(const QSqlQuery& query) const {
    OS_ASSERT(query.isValid());
    OS_ASSERT(query.isActive());
    OS_ASSERT(query.isSelect());

    bool result = AlgorithmRecord_Impl::compareValues(query);

    QVariant value;

    value = query.value(DakotaAlgorithmRecord::ColumnsType::dakotaAlgorithmRecordType);
    OS_ASSERT(value.isValid() && !value.isNull());
    result = result && (m_dakotaAlgorithmRecordType == DakotaAlgorithmRecordType(value.toInt()));

    value = query.value(DakotaAlgorithmRecord::ColumnsType::dakotaRestartFileRecordId);
    if (value.isValid() && !value.isNull()) {
      result = result && m_dakotaRestartFileRecordId && (*m_dakotaRestartFileRecordId == value.toInt());
    }
    else {
      result = result && !m_dakotaRestartFileRecordId;
    }

    value = query.value(DakotaAlgorithmRecord::ColumnsType::dakotaOutFileRecordId);
    if (value.isValid() && !value.isNull()) {
      result = result && m_dakotaOutFileRecordId && (*m_dakotaOutFileRecordId == value.toInt());
    }
    else {
      result = result && !m_dakotaOutFileRecordId;
    }

    value = query.value(DakotaAlgorithmRecord::ColumnsType::jobUUID);
    if (value.isValid() && !value.isNull() && !value.toString().isEmpty()) {
      openstudio::UUID testUUID(value.toString());
      result = result && m_lastJobUUID && (m_lastJobUUID.get() == testUUID);
    }else{
      result = result && !m_lastJobUUID;
    }

    return result;
  }
  void DakotaAlgorithmRecord_Impl::setLastValues(const QSqlQuery& query, ProjectDatabase& projectDatabase) {
    BOOST_ASSERT(query.isValid());
    BOOST_ASSERT(query.isActive());
    BOOST_ASSERT(query.isSelect());

    AlgorithmRecord_Impl::setLastValues(query,projectDatabase);

    QVariant value;

    value = query.value(DakotaAlgorithmRecord::ColumnsType::dakotaAlgorithmRecordType);
    BOOST_ASSERT(value.isValid() && !value.isNull());
    m_lastDakotaAlgorithmRecordType = DakotaAlgorithmRecordType(value.toInt());

    value = query.value(DakotaAlgorithmRecord::ColumnsType::dakotaRestartFileRecordId);
    if (value.isValid() && !value.isNull()) {
      m_lastDakotaRestartFileRecordId = value.toInt();
    }
    else {
      m_lastDakotaRestartFileRecordId.reset();
    }

    value = query.value(DakotaAlgorithmRecord::ColumnsType::dakotaOutFileRecordId);
    if (value.isValid() && !value.isNull()) {
      m_lastDakotaOutFileRecordId = value.toInt();
    }
    else {
      m_lastDakotaOutFileRecordId.reset();
    }

    value = query.value(DakotaAlgorithmRecord::ColumnsType::jobUUID);
    if (value.isValid() && !value.isNull() && !value.toString().isEmpty()) {
      m_lastJobUUID = openstudio::UUID(value.toString());
    }else{
      m_lastJobUUID.reset();
    }
  }