bool AbstractTable::contentEquals(const c_atable_ptr_t& other) const { if (size() != other->size()) { return false; } if (columnCount() != other->columnCount()) { return false; } for (size_t column = 0; column < columnCount(); column++) { auto md = metadataAt(column); auto md2 = other->metadataAt(column); if (!types::isCompatible(md.getType(),md2.getType())) { return false; } if (md.getName() != md2.getName()) { return false; } for (size_t row = 0; row < size(); row++) { bool valueEqual = false; switch (md.getType()) { case IntegerType: case IntegerTypeDelta: case IntegerTypeDeltaConcurrent: case IntegerNoDictType: valueEqual = getValue<hyrise_int_t>(column, row) == other->getValue<hyrise_int_t>(column, row); break; case FloatType: case FloatTypeDelta: case FloatTypeDeltaConcurrent: valueEqual = getValue<hyrise_float_t>(column, row) == other->getValue<hyrise_float_t>(column, row); break; case StringType: case StringTypeDelta: case StringTypeDeltaConcurrent: valueEqual = getValue<std::string>(column, row).compare(other->getValue<std::string>(column, row)) == 0; break; default: break; } if (!valueEqual) { return false; } } } return true; }