mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-08-12 00:54:20 +02:00
Limit results to what was asked for
This commit is contained in:
@@ -27,10 +27,11 @@
|
|||||||
using namespace Tomahawk;
|
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 )
|
: DatabaseCommand( parent )
|
||||||
, m_sqlSelect( sqlSelect )
|
, m_sqlSelect( sqlSelect )
|
||||||
, m_queryType( type )
|
, m_queryType( type )
|
||||||
|
, m_limit( limit )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,7 +41,7 @@ DatabaseCommand_GenericSelect::exec( DatabaseImpl* dbi )
|
|||||||
{
|
{
|
||||||
TomahawkSqlQuery query = dbi->newquery();
|
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();
|
query.exec();
|
||||||
|
|
||||||
QList< query_ptr > queries;
|
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
|
* 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
|
class DLLEXPORT DatabaseCommand_GenericSelect : public DatabaseCommand
|
||||||
{
|
{
|
||||||
@@ -56,7 +60,7 @@ public:
|
|||||||
Album
|
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 void exec( DatabaseImpl* lib );
|
||||||
virtual bool doesMutates() const { return false; }
|
virtual bool doesMutates() const { return false; }
|
||||||
|
|
||||||
@@ -70,6 +74,7 @@ signals:
|
|||||||
private:
|
private:
|
||||||
QString m_sqlSelect;
|
QString m_sqlSelect;
|
||||||
QueryType m_queryType;
|
QueryType m_queryType;
|
||||||
|
int m_limit;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DATABASECOMMAND_GENERICSELECT_H
|
#endif // DATABASECOMMAND_GENERICSELECT_H
|
||||||
|
@@ -55,7 +55,6 @@ DatabaseFactory::typeSelectors() const
|
|||||||
|
|
||||||
DatabaseGenerator::DatabaseGenerator ( QObject* parent )
|
DatabaseGenerator::DatabaseGenerator ( QObject* parent )
|
||||||
: GeneratorInterface ( parent )
|
: GeneratorInterface ( parent )
|
||||||
, m_curCountRequested( 0 )
|
|
||||||
{
|
{
|
||||||
// defaults
|
// defaults
|
||||||
m_type = "database";
|
m_type = "database";
|
||||||
@@ -125,8 +124,9 @@ DatabaseGenerator::generate( int number )
|
|||||||
|
|
||||||
tDebug() << "Generated sql query:" << control.dynamicCast< DatabaseControl >()->sql();
|
tDebug() << "Generated sql query:" << control.dynamicCast< DatabaseControl >()->sql();
|
||||||
DatabaseCommand_GenericSelect* cmd = new DatabaseCommand_GenericSelect( control.dynamicCast< DatabaseControl >()->sql(),
|
DatabaseCommand_GenericSelect* cmd = new DatabaseCommand_GenericSelect( control.dynamicCast< DatabaseControl >()->sql(),
|
||||||
static_cast< DatabaseCommand_GenericSelect::QueryType >( control->match().toInt() ) );
|
static_cast< DatabaseCommand_GenericSelect::QueryType >( control->match().toInt() ),
|
||||||
m_curCountRequested = number; // Can't set count on dbcmd itself as sender() in slot is 0
|
number
|
||||||
|
);
|
||||||
|
|
||||||
connect( cmd, SIGNAL( tracks( QList<Tomahawk::query_ptr> ) ), this, SLOT( tracksGenerated( QList<Tomahawk::query_ptr> ) ) );
|
connect( cmd, SIGNAL( tracks( QList<Tomahawk::query_ptr> ) ), this, SLOT( tracksGenerated( QList<Tomahawk::query_ptr> ) ) );
|
||||||
Database::instance()->enqueue( QSharedPointer< DatabaseCommand >( cmd ) );
|
Database::instance()->enqueue( QSharedPointer< DatabaseCommand >( cmd ) );
|
||||||
@@ -139,15 +139,7 @@ DatabaseGenerator::generate( int number )
|
|||||||
void
|
void
|
||||||
DatabaseGenerator::tracksGenerated ( const QList< query_ptr >& tracks )
|
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 );
|
emit generated( tracks );
|
||||||
|
|
||||||
m_curCountRequested = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -73,7 +73,6 @@ namespace Tomahawk
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QPixmap m_logo;
|
QPixmap m_logo;
|
||||||
int m_curCountRequested;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@@ -118,7 +118,7 @@ SocialPlaylistWidget::playlist1Created()
|
|||||||
{
|
{
|
||||||
Q_ASSERT( m_coolQuery1->generator().dynamicCast< DatabaseGenerator >() );
|
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!" );
|
dyncontrol_ptr control = m_coolQuery1->generator().dynamicCast< DatabaseGenerator >()->createControl( sql, DatabaseCommand_GenericSelect::Track, "This is a cool playlist!" );
|
||||||
m_coolQuery1->createNewRevision( uuid() );
|
m_coolQuery1->createNewRevision( uuid() );
|
||||||
|
Reference in New Issue
Block a user