void
QueryBuilder::buildQuery()
{
if ( m_query.isEmpty() )
{
linkTables( m_linkTables );
m_query = "SELECT " + m_values + " FROM " + m_tables + ' ' + m_join + " WHERE " + CollectionDB::instance()->boolT() + ' ' + m_where;
if ( !m_showAll && ( m_linkTables & QueryBuilder::tabSong || m_linkTables & QueryBuilder::tabStats ) )
{
IdList list = MountPointManager::instance()->getMountedDeviceIds();
QString deviceIds = "";
//debug() << "number of device ids " << list.count() << endl;
foreachType( IdList, list )
{
if ( it != list.begin() ) deviceIds += ',';
deviceIds += QString::number( *it );
}
QString sql = " AND %1.deviceid IN (" + deviceIds + ")";
if ( m_linkTables & QueryBuilder::tabSong )
sql.arg( "tags" );
else
sql.arg( "statistics" );
m_query += sql;
}
// GROUP BY must be before ORDER BY for sqlite
// HAVING must be between GROUP BY and ORDER BY
if ( !m_group.isEmpty() ) m_query += " GROUP BY " + m_group;
if ( !m_having.isEmpty() ) m_query += " HAVING " + m_having;
if ( !m_sort.isEmpty() ) m_query += " ORDER BY " + m_sort;
m_query += m_limit;
m_query += ";";
}
}