diff --git a/src/libtomahawk/database/databasecommand_genericselect.cpp b/src/libtomahawk/database/databasecommand_genericselect.cpp index 56899a309..8b151928c 100644 --- a/src/libtomahawk/database/databasecommand_genericselect.cpp +++ b/src/libtomahawk/database/databasecommand_genericselect.cpp @@ -27,10 +27,11 @@ using namespace Tomahawk; -DatabaseCommand_GenericSelect::DatabaseCommand_GenericSelect( const QString& sqlSelect, QueryType type, QObject* parent ) +DatabaseCommand_GenericSelect::DatabaseCommand_GenericSelect( const QString& sqlSelect, QueryType type, int limit, QObject* parent ) : DatabaseCommand( parent ) , m_sqlSelect( sqlSelect ) , m_queryType( type ) + , m_limit( limit ) { } @@ -40,7 +41,7 @@ DatabaseCommand_GenericSelect::exec( DatabaseImpl* dbi ) { TomahawkSqlQuery query = dbi->newquery(); - query.prepare( m_sqlSelect ); + query.prepare( QString( "%1 %2;" ).arg( m_sqlSelect ).arg( m_limit > -1 ? QString( " LIMIT %1" ).arg( m_limit ) : QString() ) ); query.exec(); QList< query_ptr > queries; diff --git a/src/libtomahawk/database/databasecommand_genericselect.h b/src/libtomahawk/database/databasecommand_genericselect.h index e469cd671..da2989543 100644 --- a/src/libtomahawk/database/databasecommand_genericselect.h +++ b/src/libtomahawk/database/databasecommand_genericselect.h @@ -44,6 +44,10 @@ * * Any extra values in the resultset will be returned as a QVariantList attached to the "data" property of each query_ptr * + * Notes: + * * Do not trail your SQL command with ; + * * Do not use the LIMIT command if you pass limitResults > -1 + * */ class DLLEXPORT DatabaseCommand_GenericSelect : public DatabaseCommand { @@ -56,7 +60,7 @@ public: Album }; - explicit DatabaseCommand_GenericSelect( const QString& sqlSelect, QueryType type, QObject* parent = 0 ); + explicit DatabaseCommand_GenericSelect( const QString& sqlSelect, QueryType type, int limitResults = -1, QObject* parent = 0 ); virtual void exec( DatabaseImpl* lib ); virtual bool doesMutates() const { return false; } @@ -70,6 +74,7 @@ signals: private: QString m_sqlSelect; QueryType m_queryType; + int m_limit; }; #endif // DATABASECOMMAND_GENERICSELECT_H diff --git a/src/libtomahawk/playlist/dynamic/database/DatabaseGenerator.cpp b/src/libtomahawk/playlist/dynamic/database/DatabaseGenerator.cpp index a0f449377..1a71a3c5b 100644 --- a/src/libtomahawk/playlist/dynamic/database/DatabaseGenerator.cpp +++ b/src/libtomahawk/playlist/dynamic/database/DatabaseGenerator.cpp @@ -55,7 +55,6 @@ DatabaseFactory::typeSelectors() const DatabaseGenerator::DatabaseGenerator ( QObject* parent ) : GeneratorInterface ( parent ) - , m_curCountRequested( 0 ) { // defaults m_type = "database"; @@ -125,8 +124,9 @@ DatabaseGenerator::generate( int number ) tDebug() << "Generated sql query:" << control.dynamicCast< DatabaseControl >()->sql(); DatabaseCommand_GenericSelect* cmd = new DatabaseCommand_GenericSelect( control.dynamicCast< DatabaseControl >()->sql(), - static_cast< DatabaseCommand_GenericSelect::QueryType >( control->match().toInt() ) ); - m_curCountRequested = number; // Can't set count on dbcmd itself as sender() in slot is 0 + static_cast< DatabaseCommand_GenericSelect::QueryType >( control->match().toInt() ), + number + ); connect( cmd, SIGNAL( tracks( QList ) ), this, SLOT( tracksGenerated( QList ) ) ); Database::instance()->enqueue( QSharedPointer< DatabaseCommand >( cmd ) ); @@ -139,15 +139,7 @@ DatabaseGenerator::generate( int number ) void DatabaseGenerator::tracksGenerated ( const QList< query_ptr >& tracks ) { - if( m_curCountRequested == 0 ) - return; - - if ( m_curCountRequested < tracks.size() ) - emit generated( tracks.mid( 0, m_curCountRequested ) ); - else - emit generated( tracks ); - - m_curCountRequested = 0; + emit generated( tracks ); } diff --git a/src/libtomahawk/playlist/dynamic/database/DatabaseGenerator.h b/src/libtomahawk/playlist/dynamic/database/DatabaseGenerator.h index 83802d6c3..db2a52df6 100644 --- a/src/libtomahawk/playlist/dynamic/database/DatabaseGenerator.h +++ b/src/libtomahawk/playlist/dynamic/database/DatabaseGenerator.h @@ -73,7 +73,6 @@ namespace Tomahawk private: QPixmap m_logo; - int m_curCountRequested; }; }; diff --git a/src/libtomahawk/widgets/SocialPlaylistWidget.cpp b/src/libtomahawk/widgets/SocialPlaylistWidget.cpp index dc2295bfb..965d6f552 100644 --- a/src/libtomahawk/widgets/SocialPlaylistWidget.cpp +++ b/src/libtomahawk/widgets/SocialPlaylistWidget.cpp @@ -118,7 +118,7 @@ SocialPlaylistWidget::playlist1Created() { Q_ASSERT( m_coolQuery1->generator().dynamicCast< DatabaseGenerator >() ); - QString sql = "select track.name, artist.name, count(*) as counter from (select track from playback_log group by track, source), track, artist where track.id = track and artist.id = track.artist group by track order by counter desc limit 0,100;"; + QString sql = "select track.name, artist.name, count(*) as counter from (select track from playback_log group by track, source), track, artist where track.id = track and artist.id = track.artist group by track order by counter desc"; dyncontrol_ptr control = m_coolQuery1->generator().dynamicCast< DatabaseGenerator >()->createControl( sql, DatabaseCommand_GenericSelect::Track, "This is a cool playlist!" ); m_coolQuery1->createNewRevision( uuid() );