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:
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
emit generated( tracks );
|
||||
}
|
||||
|
||||
|
||||
|
@@ -73,7 +73,6 @@ namespace Tomahawk
|
||||
|
||||
private:
|
||||
QPixmap m_logo;
|
||||
int m_curCountRequested;
|
||||
};
|
||||
|
||||
};
|
||||
|
@@ -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() );
|
||||
|
Reference in New Issue
Block a user