std::string SQLitePersister::loadActiveCampaign ()
{
	SQLiteStatement stmt;
	prepare(stmt, "SELECT activecampaign FROM " TABLE_GAMESTATE);
	if (!stmt) {
		return DEFAULT_CAMPAIGN;
	}

	const int s = stmt.step();
	if (s == SQLITE_ROW) {
		return stmt.getText(0);
	} else if (s != SQLITE_DONE) {
		Log::error(LOG_CAMPAIGN, "error loading activecampaign");
	}

	return DEFAULT_CAMPAIGN;
}
bool SQLitePersister::loadCampaign (Campaign* campaign)
{
	_activeCampaign = campaign->getId();
	const uint8_t lives = loadLives(campaign->getId());
	if (lives == 0) {
		Log::error(LOG_CAMPAIGN, "no live entry for %s", campaign->getId().c_str());
		return false;
	}

	campaign->resetMaps();
	campaign->setLives(lives);
	SQLiteStatement stmt;
	prepare(stmt, "SELECT * FROM " TABLE_GAMEMAPS " WHERE campaignid = ?;");
	if (!stmt)
		return false;

	stmt.bindText(1, campaign->getId());

	for (;;) {
		const int s = stmt.step();
		if (s == SQLITE_ROW) {
			const std::string mapid = stmt.getText(1);
			CampaignMap* map = campaign->getMapById(mapid);
			if (map) {
				loadCampaignMapParameters(map, stmt);
			}
		} else if (s == SQLITE_DONE) {
			break;
		} else {
			Log::error(LOG_CAMPAIGN, "SQL step error in loadCampaign");
			return false;
		}
	}

	return campaign->getLives() > 0;
}