Не стоило "сокращать", запихивая в пост:
std::optional<QUERY_RES_TYPE> execHelperWrapper( DB_MGR *db, const QString& query )
{
bool ok = false;
auto qr = db->execHelper( query, &ok );
//return ok ? qr : std::nullopt;
if ( !qr )
return std::nullopt;
return qr;
}
std::optional<QString> selectFirstFieldOfFirstRowAsString( DB_MGR *db, const QString& query )
{
auto qr = execHelperWrapper( db, query );
if ( !qr )
return std::nullopt;
auto resVec = db->selectFirstResultToSingleStringVector( qr.value() );
//return !resVec.empty() ? resVec.front() : std::nullopt;
if ( resVec.empty() )
return std::nullopt;
return resVec.front();
}