本文整理汇总了C++中DataTable::rows方法的典型用法代码示例。如果您正苦于以下问题:C++ DataTable::rows方法的具体用法?C++ DataTable::rows怎么用?C++ DataTable::rows使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DataTable
的用法示例。
在下文中一共展示了DataTable::rows方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: migrateAccounts
void CompatibilityManager::migrateAccounts(const shared_ptr<IPortalDatabase> &database)
{
shared_ptr<IDbConnection> globalConnection = Engine::instance()->createSystemConnection();
DataTable result;
String sql = _S("select * from os_accounts");
database->execute(sql,result);
for(uint32 r=0;r<result.rows();r++)
{
String id = result.get(r,_S("id"));
shared_ptr<DataAccount> dataAccount(OS_NEW DataAccount());
dataAccount->read(result[r]);
dataAccount->description = _S("Imported from portal '") + database->getPortal()->getName();
String sql = String::format(_S("select count(*) from os_accounts where id='%S'").c_str(), id.c_str());
int nRecordExists = globalConnection->value_of(sql);
bool alreadyExists = (nRecordExists>0);
DbSqlValues values;
dataAccount->write(values);
if(alreadyExists)
globalConnection->executeStatement(globalConnection->prepare_update(DBTABLES::ACCOUNTS_TABLE, values, DBTABLES::ACCOUNTS::ID, Convert::toSQL(dataAccount->id)), values);
else
globalConnection->executeStatement(globalConnection->prepare_insert(DBTABLES::ACCOUNTS_TABLE, values), values);
}
}
示例2: queryValue
DataItem IDbConnection::queryValue(const String &sql)
{
DataItem value;
DataTable result;
if(query(sql, result))
if(result.rows() > 0 && result.columns() > 0)
value = *result[0][0];
return value;
}
示例3: value_of
uint32 IDbConnection::value_of(const String &sql) // TOCLEAN, rimpiazzare con la queryValue
{
DataTable result;
if(query(sql, result) == false)
return false;
uint32 value = 0;
if(result.rows() > 0 && result.columns() > 0)
value = *result[0][0];
return value;
}
示例4: resigner
void CompatibilityManager::resigner(const shared_ptr<IPortalDatabase> &database, shared_ptr<IdeSession> session)
{
shared_ptr<ObjectsUser> user = session->getUser(database);
if(user != nullptr)
{
Buffer signature = user->signature;
if( (signature.getSize() == 1) && (signature.getAt(0) == 0) )
{
// Need re-sign.
DataTable result;
String sql = String::format(_S("select id,entity_author,author from os_entries where author='%S' union select id,entity_author,author from os_entries where entity_author='%S'").c_str(),user->id->toUTF16().c_str(),user->id->toUTF16().c_str());
database->execute(sql,result);
for(uint32 r=0;r<result.rows();r++)
{
String id = result.get(r,_S("id"));
String entityAuthor = result.get(r,_S("entity_author"));
String author = result.get(r,_S("author"));
shared_ptr<ObjectsIObject> object = database->getPortal()->getObject(database, id.to_ascii());
if(object != nullptr)
{
LanguageResult acceptable = object->acceptable(database);
if(acceptable.empty())
{
if( (entityAuthor == user->id->toUTF16()) && (author == user->id->toUTF16()) )
{
shared_ptr<ObjectsIRevisionable> revisionable = objects_revisionable_cast(object);
if(revisionable != nullptr)
{
bool done = revisionable->signEntity(session->getPrivateKey(), database->getPortal()->getPortalID());
OS_ASSERT(done);
}
}
if(author == user->id->toUTF16())
{
bool done = object->sign(session->getPrivateKey(), database->getPortal()->getPortalID());
OS_ASSERT(done);
}
LanguageResult result = object->store(database);
OS_ASSERT(result.empty());
}
}
}
}
}
}
示例5: getChildsKey
shared_ptr<EntitiesEntities> EntitiesEntity::getChilds(const shared_ptr<IPortalDatabase> &database, const ObjectsTypes &types, const RangeUint32 &range, shared_ptr<DbSqlSelect> select) const
{
OS_ASSERT(select != nullptr);
OS_ASSERT(select->count == false);
OS_LOCK(m_cs);
String sql;
// Genera l'sql di caricamento dei figli
_getSql(database, types, range, false, select, sql);
String childsKey = getChildsKey(types);
shared_ptr<EntitiesEntities> childs = m_childs.get(childsKey);
// Controlla se i figli della tipologia specificata sono gi stati caricati in precedenza
if(childs != nullptr)
{
if(childs->getRange() == range && childs->getSql() == sql)
return childs; // Se il range in cui sono stati caricati i figli e l'sql di estrazione corrispondono non serve effettuare nuovamente il caricamento...
// Nota: se il range richiesto non coincide con quello attuale o l'sql differente bisogna ricaricare i figli
// Anche se il range attuale comprendesse quello richiesto bisogna comunque ricaricare i figli altrimenti dall'esterno,
// una volta richiesto un range, scorrendo i figli non si avrebbe la certezza che siano nel range richiesto (a meno di complicare i vari giri)
m_childs.remove(childsKey);
}
// Inizializza la lista dei figli prima di aprire il database (la connessione potrebbe fallire, ma la lista deve essere comunque creata)
childs.reset(OS_NEW EntitiesEntities(const_cast <EntitiesEntity *>(this)->get_this_ptr(), sql));
m_childs.push_back(childsKey, childs);
DataTable result;
database->execute(sql, result);
for(uint32 i = 0; i < result.rows(); i++)
{
String child_id = result.get(i, DBTABLES::ENTITY);
childs->push_back(child_id.to_ascii());
}
return childs;
}
示例6: isExtensionRegistered
bool IExtensionsExtension::isExtensionRegistered(shared_ptr<Portal> portal, shared_ptr<IPortalDatabase> db, Version &version) const
{
OS_ASSERT(portal != nullptr);
OS_EXCEPT_IF(db == nullptr, "Invalid database");
shared_ptr<DbSqlSelect> select(OS_NEW DbSqlSelect(DBTABLES::EXTENSIONS_TABLE));
select->fields.add(DbSqlField(DBTABLES::EXTENSIONS::VERSION));
select->where.add(DBTABLES::EXTENSIONS::ID, Convert::toSQL(getID().toUTF16()));
select->limit.setCount(1);
DataTable result;
if(db->execute(select, result) == false)
return false;
if(result.rows() == 0)
return false;
version.fromString(static_cast<String>(*result[0][0]).to_ascii());
return true;
}
示例7: select
bool P2pMachine::load(const String &id)
{
try
{
shared_ptr<IDbConnection> connection = Engine::instance()->createSystemConnection();
shared_ptr<DbSqlSelect> select(OS_NEW DbSqlSelect(_S("os_machines")));
select->where.add(_S("id"), Convert::toSQL(id));
select->limit.setCount(1);
DataTable result;
connection->query(select, result);
if(result.rows() == 1)
{
DataTableRow row = result[0];
DbValue<String> id;
id.read(row, _S("id"));
if(m_id.fromHex(id->to_ascii()) == false)
{
OS_ASSERTFALSE();
return false;
}
DbValue<Buffer> public_key;
public_key.read(row, _S("public_key"));
m_publicKey = public_key;
return true;
}
}
catch(std::exception &e)
{
OS_LOG_ERROR(e.what());
}
return false;
}
示例8: preAnalyze
String Connection::preAnalyze(const String &sql)
{
static boost::recursive_mutex cs;
OS_LOCK(cs);
// Per vedere le sql nel charts:
// RealtimeStatsManager::signal(sql, 1, RealtimeStatsCounter::ctAbsolute, _S("status"));
// Da notare che vengono archiviate nella os_monitor solo le query analizzate dalla "explain".
// Una "insert", non usando indici, non viene catalogata, a meno che non abbia sotto-query.
if(sql.find(_S("explain query plan ")) != String::npos)
return _S("");
if(sql.find(_S("os_monitor")) != String::npos)
return _S("");
static shared_ptr<Connection> connectionAnalyze = nullptr;
if(connectionAnalyze == nullptr)
{
shared_ptr<Driver> driver = boost::dynamic_pointer_cast<Driver>(getDriver());
String path = driver->getDatabasePath(_S("monitor.db"));
if(FileSystem::instance()->exists(path) == false)
{
// Crea il database se non esiste
File file;
String msg = _S("Cannot create file '") + path + _S("'");
OS_EXCEPT_IF(file.open(path, File::ofWrite) == false, msg.to_ascii());
}
connectionAnalyze.reset(OS_NEW Connection(path, getDriver()->createOptions(), getDriver()));
int32 res = _tsqlite3_open(path.c_str(), &connectionAnalyze->m_connection);
OS_EXCEPT_IF(res != SQLITE_OK, sqlite_last_error(connectionAnalyze->m_connection, res));
// Creazione tabella
String sqlCreate = _S("CREATE TABLE IF NOT EXISTS os_monitor (filename text,sql text,thread integer,conn integer,trans integer, qorder integer,qfrom integer,detail text,indexUsed text)");
doExecute(connectionAnalyze->m_connection, sqlCreate);
}
// I valori dei campi li setto a ?, per poter fare delle distinct sui risultati
String keySql = sql;
keySql.trim();
keySql = regex_replace(keySql, RegexManager::instance()->getRegex(_S("'(.*?)'")), _S("<s>")); // Valori dei campi
keySql = regex_replace(keySql, RegexManager::instance()->getRegex(_S("[-+]?[0-9]*\\.?[0-9]+")), _S("<n>")); // Numeri
keySql = keySql.replace_all(_S("\n"),_S(""));
keySql = keySql.replace_all(_S("\r"),_S(""));
keySql = keySql.replace_all(_S("\t"),_S(""));
keySql = keySql.replace_all(_S("'"),_S("")); // Futile, per evitare errori nella insert nella os_monitor
for(;;) // Comprimo gli spazi
{
String x = keySql;
keySql = keySql.replace_all(_S(" "),_S(" "));
if(x == keySql)
break;
}
uint32 conn = uint32(reinterpret_cast<uint64>(this));
boost::any threadID = PlatformManager::instance()->getCurrentThreadID();
// Tenta un cast a uint32
uint32 *thread = boost::any_cast<uint32>(&threadID);
int32 trans = m_transactionId;
DataTable result;
doQuery(m_connection, _S("explain query plan ") + sql,result);
for(uint32 r=0;r<result.rows();r++)
{
int32 order = *result.get(r,_S("order"));
int32 from = *result.get(r,_S("from"));
String detail = *result.get(r,_S("detail"));
String indexUsed;
String::size_type posWithIndex = detail.find(_S("WITH INDEX"));
if(posWithIndex != String::npos)
{
indexUsed = detail.substr(posWithIndex+10);
indexUsed = indexUsed.replace_all(_S("ORDER BY"),String::EMPTY);
indexUsed.trim();
}
String sqlInsert = String::format(_S("insert into os_monitor values ('%S','%S',%u,%u,%u,%d,%d,'%S','%S')").c_str(), m_filename.c_str(), keySql.c_str(), conn, thread != nullptr ? *thread : 0, trans, order, from, detail.c_str(), indexUsed.c_str());
doExecute(connectionAnalyze->m_connection, sqlInsert);
}
String trace = String::format(_S("Sqlite monitor: sql='%S',conn=%u,thread=%u,trans=%u\n").c_str(), sql.c_str(), conn, thread != nullptr ? *thread : 0, trans);
//OS_TRACE(trace);
//RealtimeStatsManager::signal(_S("Sqlite ") + keySql.mid(0,6), 1, RealtimeStatsCounter::ctRelative, _S("items"));
return keySql;
}
示例9: renameIDS
void CompatibilityManager::renameIDS(const shared_ptr<IPortalDatabase> &database)
{
/*
if(id == 2) // Reputation
newID = database->getUserReputationID(
else if(id == 7) // Avatar
else if(id == 14) // Vote
else if(id == 17) // PollVote
}
*/
// Reputations
{
DataTable result;
String sql = _S("select id, author, reference from os_reputations");
database->execute(sql,result);
for(uint32 r=0;r<result.rows();r++)
{
String id = result.get(r,_S("id"));
String author = result.get(r,_S("author"));
String reference = result.get(r,_S("reference"));
ObjectID newID = database->getUserReputationID(author.to_ascii(), reference.to_ascii());
String sql = _S("update os_reputations set id=") + Convert::toSQL(newID) + _S(" where id=") + Convert::toSQL(id);
database->execute(sql);
sql = _S("update os_entries set id=") + Convert::toSQL(newID) + _S(" where id=") + Convert::toSQL(id);
database->execute(sql);
}
}
// Avatars
{
DataTable result;
String sql = _S("select id, author from os_avatars");
database->execute(sql,result);
for(uint32 r=0;r<result.rows();r++)
{
String id = result.get(r,_S("id"));
String author = result.get(r,_S("author"));
ObjectID newID = database->getUserAvatarID(author.to_ascii());
String sql = _S("update os_avatars set id=") + Convert::toSQL(newID) + _S(" where id=") + Convert::toSQL(id);
database->execute(sql);
sql = _S("update os_entries set id=") + Convert::toSQL(newID) + _S(" where id=") + Convert::toSQL(id);
database->execute(sql);
}
}
// Vote
{
DataTable result;
String sql = _S("select id, author, reference from os_votes");
database->execute(sql,result);
for(uint32 r=0;r<result.rows();r++)
{
String id = result.get(r,_S("id"));
String author = result.get(r,_S("author"));
String reference = result.get(r,_S("reference"));
ObjectID newID = database->getUserVoteID(author.to_ascii(), reference.to_ascii());
String sql = _S("update os_votes set id=") + Convert::toSQL(newID) + _S(" where id=") + Convert::toSQL(id);
database->execute(sql);
sql = _S("update os_entries set id=") + Convert::toSQL(newID) + _S(" where id=") + Convert::toSQL(id);
database->execute(sql);
}
}
// PollVote
{
DataTable result;
String sql = _S("select id, author, reference from os_polls_votes");
database->execute(sql,result);
for(uint32 r=0;r<result.rows();r++)
{
String id = result.get(r,_S("id"));
String author = result.get(r,_S("author"));
String reference = result.get(r,_S("reference"));
ObjectID newID = database->getUserPollVoteID(author.to_ascii(), reference.to_ascii());
String sql = _S("update os_polls_votes set id=") + Convert::toSQL(newID) + _S(" where id=") + Convert::toSQL(id);
database->execute(sql);
sql = _S("update os_entries set id=") + Convert::toSQL(newID) + _S(" where id=") + Convert::toSQL(id);
database->execute(sql);
}
}
}
示例10: onPreRender
void IdeTableQuery::onPreRender()
{
ControlBase::onPreRender();
shared_ptr<XMLDocument> document = getDocument();
shared_ptr<XMLNode> node_root = document->create(_S("table_query"));
DataTable result;
if(getPage()->getDatabase()->execute(m_sql,result))
{
shared_ptr<XMLNode> node_header = node_root->addChild(_S("header"));
for(uint32 c = 0; c < result.columns(); c++)
{
String columnTitle = getColumnTitle(c);
if(columnTitle.empty())
columnTitle = result.getColumnName(c);
shared_ptr<XMLNode> node_column = node_header->addChild(_S("column"));
node_column->setAttributeString(_S("name"), columnTitle);
switch(getColumnType(c))
{
case IdeTableQuery::ctString:
{
node_column->setAttributeString(_S("type"), _S("string"));
} break;
case IdeTableQuery::ctScore:
{
node_column->setAttributeString(_S("type"), _S("score"));
} break;
case IdeTableQuery::ctEntityID:
{
node_column->setAttributeString(_S("type"), _S("entity-id"));
} break;
case IdeTableQuery::ctObjectID:
{
node_column->setAttributeString(_S("type"), _S("object-id"));
} break;
case IdeTableQuery::ctUserID:
{
node_column->setAttributeString(_S("type"), _S("user-id"));
} break;
case IdeTableQuery::ctShortDateTime:
{
node_column->setAttributeString(_S("type"), _S("short-datetime"));
} break;
case IdeTableQuery::ctLongDateTime:
{
node_column->setAttributeString(_S("type"), _S("long-datetime"));
} break;
}
}
shared_ptr<XMLNode> node_data = node_root->addChild(_S("data"));
for(uint32 r=0;r<result.rows();r++)
{
shared_ptr<XMLNode> node_data_row = node_data->addChild(_S("row"));
for(uint32 c=0;c<result.columns();c++)
{
shared_ptr<XMLNode> node_data_row_item = node_data_row->addChild(_S("item"));
String value = result.get(r,c);
switch(getColumnType(c))
{
case IdeTableQuery::ctScore:
{
node_data_row_item->setAttributeString(_S("value"), String::format(_S("%1.1f").c_str(), double(result.get(r,c))));
} break;
case IdeTableQuery::ctEntityID:
{
// Sbagliata
shared_ptr<XMLPortalExporter> exporter(OS_NEW XMLPortalExporter(node_data_row_item, getPage(), XMLPortalExporter::emLite));
shared_ptr<ObjectsIObject> object = getPage()->getObject(value.to_ascii());
if(object != nullptr)
{
object->exportXML(exporter);
}
} break;
case IdeTableQuery::ctObjectID:
{
shared_ptr<XMLPortalExporter> exporter(OS_NEW XMLPortalExporter(node_data_row_item, getPage(), XMLPortalExporter::emLite));
shared_ptr<ObjectsIObject> object = getPage()->getObject(value.to_ascii());
if(object != nullptr)
{
object->exportXML(exporter);
}
} break;
case IdeTableQuery::ctUserID:
{
shared_ptr<XMLPortalExporter> exporter(OS_NEW XMLPortalExporter(node_data_row_item, getPage(), XMLPortalExporter::emLite));
shared_ptr<ObjectsIObject> object = getPage()->getObject(value.to_ascii());
if(object != nullptr)
{
object->exportXML(exporter);
}
//.........这里部分代码省略.........
示例11: computeStatistics
void Forum::computeStatistics(shared_ptr<IPortalDatabase> db, shared_ptr<ObjectsIObject> object)
{
ComponentBase::computeStatistics(db, object);
shared_ptr<ObjectsSection> section = objects_section_cast(object);
shared_ptr<ForumStats> stats(OS_NEW ForumStats());
stats->reference = section->getEntityID().toUTF16();
stats->topics = 0;
stats->posts = 0;
uint32 directTopics=0;
uint32 directPosts=0;
// Calcolo le statistiche sui topics figli
{
String sql = String::format(_S("select count(*), sum(os_discussions_stats.posts) from os_discussions_stats, os_snapshot_objects where \
os_snapshot_objects.parent = '%S' \
and os_snapshot_objects.type in (%d,%d) \
and os_snapshot_objects.visible = 1 \
and os_discussions_stats.reference = os_snapshot_objects.entity \
and os_discussions_stats.parent = '%S'").c_str(),
section->getEntityID().toUTF16().c_str(),
portalObjectTypeText,
portalObjectTypePoll,
section->getEntityID().toUTF16().c_str()
);
DataTable table;
db->execute(sql, table);
directTopics = *table[0][0];
directPosts = *table[0][1];
}
uint32 indirectTopics=0;
uint32 indirectPosts=0;
// Calcolo le statistiche sui forums figli
{
String sql = String::format(String(_S("\
select sum(") + OS_FORUMS_FORUM_STATS_TABLE + _S(".topics), sum(") + OS_FORUMS_FORUM_STATS_TABLE + _S(".posts) \
from ") + OS_FORUMS_FORUM_STATS_TABLE + _S(",os_snapshot_objects,os_sections \
where \
os_snapshot_objects.entity = ") + OS_FORUMS_FORUM_STATS_TABLE + _S(".reference and \
os_snapshot_objects.current = os_sections.id and \
os_sections.component = '%S' and \
os_snapshot_objects.parent = '%S' and \
os_snapshot_objects.visible = 1")).c_str(),
getID().toUTF16().c_str(),
section->getEntityID().toUTF16().c_str());
DataTable table;
db->execute(sql, table);
indirectTopics = *table[0][0];
indirectPosts = *table[0][1];
}
stats->reference = section->getEntityID().toUTF16();
stats->topics = directTopics + indirectTopics;
stats->posts = directPosts + indirectPosts;
// Calcolo le statistiche riferite ai topic figli
{
String sql = String::format(_S("\
select os_discussions_stats.reference, os_discussions_stats.last_entry, os_discussions_stats.last_entry_date \
from \
os_snapshot_objects, \
os_discussions_stats \
where \
os_snapshot_objects.entity = os_discussions_stats.reference and \
os_snapshot_objects.parent = '%S' and \
os_snapshot_objects.type in (%d,%d) and \
os_snapshot_objects.visible = 1 \
order by os_discussions_stats.last_entry_date desc \
limit 1").c_str(),
section->getEntityID().toUTF16().c_str(),
portalObjectTypeText,
portalObjectTypePoll);
DataTable table;
db->execute(sql, table);
if(table.rows()>0)
{
stats->last_topic = *table[0][0];
stats->last_message = *table[0][1];
stats->last_message_date = *table[0][2];
}
}
// Calcolo le statistiche riferite ai forums figli
{
String sql = String::format(String(_S("\
select ") + OS_FORUMS_FORUM_STATS_TABLE + _S(".last_topic, ") + OS_FORUMS_FORUM_STATS_TABLE + _S(".last_message, ") + OS_FORUMS_FORUM_STATS_TABLE + _S(".last_message_date \
from \
os_snapshot_objects, \
") + OS_FORUMS_FORUM_STATS_TABLE + _S(", \
os_sections \
where \
os_snapshot_objects.entity = ") + OS_FORUMS_FORUM_STATS_TABLE + _S(".reference and \
os_snapshot_objects.current = os_sections.id and \
os_sections.component = '%S' and \
os_snapshot_objects.parent = '%S' and \
//.........这里部分代码省略.........
示例12: executeQuery
//.........这里部分代码省略.........
if( (query->getByUser().empty() == false) && (query->getByUser() != _S("*")) )
{
String user = query->getByUser();
// MySelf test
if(user == _S("myself"))
{
// VERYURGENTRAZOR: Commentata perchè ho piallato il loggedUser come parametro... rivalutare la cosa
/*
if( (loggedUser != nullptr) && loggedUser->isLogged() && (loggedUser->getGuestMode() == false))
{
user = loggedUser->getUser()->id->toUTF16();
}
else
{
user == String::EMPTY;
}
*/
user == String::EMPTY;
}
else
{
// VERYURGENT, un test migliore per verificare se è un ID?
// VERYURGENT, l'sql potrebbe essere Sqlite-specifica.
// Fatto meglio, dovrei avere un'altro combo "localizza per" "nick/id"
// Inoltre qui ci sarebbe da supportare una ricerca "non exact-match" per farlo stile Invision.
if(user.length() != 48)
{
algorithms::to_upper(user);
String sql = String::format(_S("select rs.id from os_snapshot_users ts, os_users tu where ts.id=tu.id and upper(tu.name) = %S").c_str(), Convert::toSQL(user).c_str());
DataTable result;
if(database->execute(sql, result))
{
if(result.rows() > 0 && result.columns() > 0)
user = static_cast<String>(*result[0][0]);
}
}
}
// Come autore della primaria
select->tables.add(DbSqlTable(DBTABLES::ENTRIES_TABLE));
// Crea la join
select->where.add(DbSqlField(DBTABLES::SNAPSHOT_OBJECTS::ENTITY, DBTABLES::SNAPSHOT_OBJECTS_TABLE), DbSqlField(DBTABLES::ENTRIES::ID, DBTABLES::ENTRIES_TABLE));
select->where.add(DbSqlField(DBTABLES::ENTRIES::AUTHOR, DBTABLES::ENTRIES_TABLE), Convert::toSQL(user));
// Come editore dell'oggetto
// where DBTABLES::SNAPSHOT_OBJECTS::REFERENCE in (select id from os_entries where revision= getByUser();
}
}
else
{
// Se objectsList valorizzata, allora il secondo passo di una ricerca in groupMode, gli passo l'elenco oggetti.
StringList objectsList;
for(StringMap::const_iterator i = objectsMap.begin(); i != objectsMap.end(); ++i)
{
objectsList.push_back(_S("'") + i->first + _S("'"));
}
//select->where.add(String(DBTABLES::SNAPSHOT_OBJECTS_TABLE) + _S(".") + DBTABLES::SNAPSHOT_OBJECTS::REFERENCE, objectsList);
select->where.add(DbSqlField(DBTABLES::SNAPSHOT_OBJECTS::ENTITY, DBTABLES::SNAPSHOT_OBJECTS_TABLE), objectsList);
}
// Se il primo passaggio di una groupMode, l'ordinamento inutile.
// 0.12 RC5, tolto, con un limite nel primo giro di group-mode, devono essere ordinati.
//if( (!query->getGroupMode()) || (!objectsMap.empty()) )