1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-11 16:44:05 +02:00

Limit results to what was asked for

This commit is contained in:
Leo Franchi
2011-07-30 17:16:56 -04:00
parent 808901d192
commit 91bdfec734
5 changed files with 14 additions and 17 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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<Tomahawk::query_ptr> ) ), this, SLOT( tracksGenerated( QList<Tomahawk::query_ptr> ) ) );
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;
}

View File

@@ -73,7 +73,6 @@ namespace Tomahawk
private:
QPixmap m_logo;
int m_curCountRequested;
};
};

View File

@@ -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() );